mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@96 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
9c877e4102
commit
8c56c5a087
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
#define MY_DATA_VERSION_MAJOR 1
|
||||
#define MY_DATA_VERSION_MINOR 1
|
||||
#define MY_DATA_VERSION_MINOR 2
|
||||
|
||||
typedef struct {
|
||||
u8 version_major;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
|
||||
#include <twl.h>
|
||||
#include <nitro/nvram/nvram.h>
|
||||
#include <nitroWiFi/ncfg.h>
|
||||
|
||||
#include "font.h"
|
||||
#include "text.h"
|
||||
@ -133,17 +134,28 @@ static void ReportLastErrorPath(const char *path)
|
||||
|
||||
}
|
||||
|
||||
|
||||
static u8 my_nor_buf[NVRAM_PERSONAL_DATA_SIZE] ATTRIBUTE_ALIGN(32);
|
||||
static u8 work_content[NCFG_CHECKCONFIGEX_WORK_SIZE];
|
||||
|
||||
BOOL nvram_backup(char *path)
|
||||
{
|
||||
BOOL bSuccess;
|
||||
BOOL ret_flag = TRUE;
|
||||
FSFile nor_fd;
|
||||
u32 offset;
|
||||
u32 vol;
|
||||
int len;
|
||||
#define BUF_SIZE 0x100
|
||||
u8 nor_buf[BUF_SIZE];
|
||||
|
||||
char *nor_file_path = path;
|
||||
|
||||
void *work = (void *)work_content;
|
||||
|
||||
MI_CpuClear8(work, NCFG_CHECKCONFIGEX_WORK_SIZE);
|
||||
if( NCFG_RESULT_INIT_OK != NCFG_CheckConfigEx( work ) ) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
FS_InitFile(&nor_fd);
|
||||
|
||||
// STD_TSNPrintf(nor_file_path, sizeof(nor_file_path), path );
|
||||
@ -167,29 +179,25 @@ BOOL nvram_backup(char *path)
|
||||
|
||||
if( offset == 0 ) {
|
||||
OS_TPrintf( "nvram error: offset = 0x%02x\n", offset);
|
||||
(void)FS_CloseFile(&nor_fd);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
offset *= 8;
|
||||
offset -= 0xA00;
|
||||
|
||||
for( vol = 0 ; vol < NVRAM_PERSONAL_DATA_SIZE ; vol += BUF_SIZE ) {
|
||||
if( TRUE != my_nvram_read( offset+vol , BUF_SIZE, (void* )nor_buf) ) {
|
||||
OS_TPrintf( "nvram error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
else {
|
||||
#if 0
|
||||
len = FS_WriteFile(&nor_fd, nor_buf, BUF_SIZE);
|
||||
#else
|
||||
len = my_fs_crypto_write(&nor_fd, nor_buf, BUF_SIZE);
|
||||
#endif
|
||||
if (len != BUF_SIZE)
|
||||
{
|
||||
OS_TPrintf("FS_WriteFile() failed.");
|
||||
break;
|
||||
}
|
||||
if( TRUE != my_nvram_read( offset , NVRAM_PERSONAL_DATA_SIZE, (void* )my_nor_buf) ) {
|
||||
OS_TPrintf( "nvram error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
ret_flag = FALSE;
|
||||
}
|
||||
else {
|
||||
len = my_fs_crypto_write(&nor_fd, my_nor_buf, NVRAM_PERSONAL_DATA_SIZE);
|
||||
if (len != NVRAM_PERSONAL_DATA_SIZE) {
|
||||
OS_TPrintf("FS_WriteFile() failed.");
|
||||
ret_flag = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
OS_TPrintf("\n");
|
||||
|
||||
FS_FlushFile(&nor_fd);
|
||||
@ -197,21 +205,34 @@ BOOL nvram_backup(char *path)
|
||||
bSuccess = FS_CloseFile(&nor_fd);
|
||||
|
||||
// OS_TPrintf( "nvram read completed.\n");
|
||||
return TRUE;
|
||||
return ret_flag;
|
||||
}
|
||||
|
||||
|
||||
typedef struct tagDWCWiFiInfo {
|
||||
u64 attestedUserId; // ユーザ ID (認証済み)
|
||||
u64 notAttestedId; // ユーザ ID (認証前)
|
||||
u16 pass; // パスワード
|
||||
u16 randomHistory; // 乱数履歴
|
||||
} DWCWiFiInfo;
|
||||
|
||||
BOOL nvram_restore(char *path)
|
||||
{
|
||||
BOOL bSuccess;
|
||||
BOOL ret_flag = TRUE;
|
||||
FSFile nor_fd;
|
||||
u32 offset;
|
||||
u32 vol;
|
||||
int len;
|
||||
// char nor_file_path[FS_FILE_NAME_MAX];
|
||||
char *nor_file_path = path;
|
||||
|
||||
#define BUF_SIZE 0x100
|
||||
u8 nor_buf[BUF_SIZE];
|
||||
NCFGConfig *p_ncfgc = NULL;
|
||||
#if 0
|
||||
DWCWiFiInfo buf_content;
|
||||
DWCWiFiInfo *buf = &buf_content;
|
||||
u8 Wifi[14];
|
||||
#endif
|
||||
u64 id1;
|
||||
u64 id2;
|
||||
|
||||
FS_InitFile(&nor_fd);
|
||||
// STD_TSNPrintf(nor_file_path, sizeof(nor_file_path), path );
|
||||
@ -224,6 +245,7 @@ BOOL nvram_restore(char *path)
|
||||
/* offsetƒAƒhƒŒƒX‚̎擾 */
|
||||
if( TRUE != my_nvram_read( NVRAM_PERSONAL_DATA_OFFSET , sizeof(u16), (void* )&offset) ) {
|
||||
OS_TPrintf( "nvram error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
ret_flag = FALSE;
|
||||
}
|
||||
else {
|
||||
OS_TPrintf( "nvram success: offset = 0x%02x\n", offset);
|
||||
@ -234,34 +256,114 @@ BOOL nvram_restore(char *path)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* offsetのチェックは? */
|
||||
offset *= 8;
|
||||
offset -= 0xA00;
|
||||
|
||||
for( vol = 0 ; vol < NVRAM_PERSONAL_DATA_SIZE ; vol += BUF_SIZE ) {
|
||||
OS_TPrintf(".");
|
||||
len = my_fs_crypto_read(&nor_fd, my_nor_buf, NVRAM_PERSONAL_DATA_SIZE);
|
||||
if (len != NVRAM_PERSONAL_DATA_SIZE) {
|
||||
ret_flag = FALSE;
|
||||
OS_TPrintf("FS_ReadFile() failed.");
|
||||
}
|
||||
|
||||
|
||||
p_ncfgc = (NCFGConfig *)my_nor_buf;
|
||||
|
||||
// DWCWiFiInfo *buf;
|
||||
// u8 Wifi[14];
|
||||
|
||||
// > となります。DWCライブラリによる修復を使わない場合は
|
||||
// > ・0x0f0と0x1f0にあるIDを確認して、両方のIDが同じ、かつ0でない場合にコピーする
|
||||
#if 0
|
||||
MI_CpuCopy8(&p_ncfgc->slot[0].wifi[0], Wifi, 14);
|
||||
MI_CpuCopy8(&Wifi[ 0], &buf->attestedUserId, 6);
|
||||
buf->attestedUserId &= 0x07FFFFFFFFFF;
|
||||
|
||||
MI_CpuCopy8(&Wifi[ 5], &buf->notAttestedId, 6);
|
||||
buf->notAttestedId >>= 3;
|
||||
buf->notAttestedId &= 0x07FFFFFFFFFF;
|
||||
MI_CpuCopy8(&Wifi[10], &buf->pass, 2);
|
||||
buf->pass >>= 6;
|
||||
buf->pass &= 0x03FF;
|
||||
MI_CpuCopy8(&Wifi[12], &buf->randomHistory, 2);
|
||||
|
||||
id1 = buf->attestedUserId;
|
||||
#else
|
||||
// MI_CpuCopy8(&p_ncfgc->slot[0].wifi[0], &id1, 6);
|
||||
MI_CpuCopy8(&my_nor_buf[0x600+ 0xf0], &id1, 6);
|
||||
id1 &= 0x07FFFFFFFFFF;
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
len = FS_ReadFile(&nor_fd, nor_buf, BUF_SIZE);
|
||||
#else
|
||||
len = my_fs_crypto_read(&nor_fd, nor_buf, BUF_SIZE);
|
||||
#endif
|
||||
if (len != BUF_SIZE) {
|
||||
OS_TPrintf("FS_ReadFile() failed.");
|
||||
break;
|
||||
}
|
||||
MI_CpuCopy8(&p_ncfgc->slot[1].wifi[0], Wifi, 14);
|
||||
MI_CpuCopy8(&Wifi[ 0], &buf->attestedUserId, 6);
|
||||
buf->attestedUserId &= 0x07FFFFFFFFFF;
|
||||
MI_CpuCopy8(&Wifi[ 5], &buf->notAttestedId, 6);
|
||||
buf->notAttestedId >>= 3;
|
||||
buf->notAttestedId &= 0x07FFFFFFFFFF;
|
||||
MI_CpuCopy8(&Wifi[10], &buf->pass, 2);
|
||||
buf->pass >>= 6;
|
||||
buf->pass &= 0x03FF;
|
||||
MI_CpuCopy8(&Wifi[12], &buf->randomHistory, 2);
|
||||
|
||||
if( TRUE != my_nvram_write( offset+vol , BUF_SIZE, (void* )nor_buf) ) {
|
||||
id2 = buf->attestedUserId;
|
||||
#else
|
||||
// MI_CpuCopy8(&p_ncfgc->slot[1].wifi[0], &id2, 6);
|
||||
MI_CpuCopy8(&my_nor_buf[0x600+ 0x1f0], &id2, 6);
|
||||
id2 &= 0x07FFFFFFFFFF;
|
||||
#endif
|
||||
|
||||
if( (id1 == id2) && (id1 != 0) ) {
|
||||
if( TRUE != my_nvram_write( offset , /* size */ NVRAM_PERSONAL_DATA_SIZE, (void* )my_nor_buf) ) {
|
||||
ret_flag = FALSE;
|
||||
OS_TPrintf( "nvram write error: %s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
else {
|
||||
OS_TPrintf( "nvram write id1 id2 - 0 %s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
ret_flag = 3;
|
||||
}
|
||||
|
||||
/*
|
||||
#define NVRAM_PERSONAL_DATA_OFFSET 0x20
|
||||
|
||||
Wifi設定だけなら0x0A00
|
||||
#define NVRAM_PERSONAL_DATA_SIZE 0x0A00
|
||||
#define NVRAM_INTERNAL_BUF_SIZE 0x100
|
||||
|
||||
|
||||
・NORの0x20から2byteを読み出し、8倍する(だいたい0x1fe00ぐらいになる)
|
||||
・そこから-0x400した値(だいたい0x1fa00)がWi-Fiユーザー情報の先頭となる
|
||||
|
||||
|
||||
そして、本IDが有るか、無いかの確認は
|
||||
Wi-Fiユーザー情報の0xf0から14byteがWi-FiコネクションID情報になります。
|
||||
この14byteのWi-FiコネクションID情報の後ろ43bitが認証済みユーザーIDが格納される
|
||||
場所となりますので、ここの値がすべて「0」の場合は、本IDが無いと見なす事ができます。
|
||||
# 詳細は添付の資料をご確認ください。
|
||||
# 資料はDSのものですが、Wi-FiコネクションID情報の部分は共通となります。
|
||||
|
||||
そして、今回のツールで修正をお願いしたい内容としましては
|
||||
・上記のWi-FiコネクションID情報に本IDが存在しない場合は、
|
||||
Wi-Fiユーザー情報全てを移行しない
|
||||
になります。
|
||||
|
||||
移行しない領域は
|
||||
・Wi-Fiユーザー情報の先頭(だいたい0x1fa00)から更に-0x600したところ(だいたい0x1f400)
|
||||
から0x1000byte
|
||||
# -0x600にはTWLで拡張された領域が入ります。
|
||||
と、なります。
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
OS_TPrintf("\n");
|
||||
bSuccess = FS_CloseFile(&nor_fd);
|
||||
|
||||
OS_TPrintf( "nvram write completed.\n");
|
||||
|
||||
return TRUE;
|
||||
return ret_flag;
|
||||
}
|
||||
|
||||
|
||||
@ -439,6 +439,34 @@ BOOL WaitEC(ECOpId opId)
|
||||
miya_log_fprintf(log_fd, "%s Failed to EC_GetProgress, result=%d %s\n",
|
||||
__FUNCTION__, result, GetECErrorString(result));
|
||||
mprintf("EC_GetProgress failed %d\n %s\n", result, GetECErrorString(result));
|
||||
|
||||
if( MI_CpuComp8(&progress_prev, &progress, sizeof(progress)) != 0 ) {
|
||||
miya_log_fprintf(log_fd, "---------\n");
|
||||
miya_log_fprintf(log_fd, "progress report\n");
|
||||
miya_log_fprintf(log_fd, " status %5d %s\n", progress.status,
|
||||
GetECErrorString(progress.status));
|
||||
miya_log_fprintf(log_fd, " operation %5d %s\n", progress.operation,
|
||||
GetECOperationString(progress.operation));
|
||||
miya_log_fprintf(log_fd, " phase %5d %s\n", progress.phase,
|
||||
GetECOpPhaseString(progress.phase));
|
||||
miya_log_fprintf(log_fd, " isCancelRequested %5d\n", progress.isCancelRequested);
|
||||
miya_log_fprintf(log_fd, " totalSize %5d\n", progress.totalSize);
|
||||
miya_log_fprintf(log_fd, " downloadedSize %5d\n", progress.downloadedSize);
|
||||
miya_log_fprintf(log_fd, " errCode %5d\n", progress.errCode);
|
||||
miya_log_fprintf(log_fd, " errInfo %s\n", progress.errInfo);
|
||||
progress_prev = progress;
|
||||
/*
|
||||
progress report
|
||||
status -4015 EC_ERROR_WS_REPORT
|
||||
operation 12 EC_OP_Transfer
|
||||
phase 2 EC_PHASE_Done
|
||||
isCancelRequested 0
|
||||
totalSize 0
|
||||
downloadedSize 553
|
||||
errCode -5986
|
||||
errInfo IAS - TWL device unmatched
|
||||
*/
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -686,6 +714,8 @@ int ECDownload(const NAMTitleId* pTitleIds, u32 numTitleIds)
|
||||
char status;
|
||||
// BOOL ret_flag;
|
||||
|
||||
STD_MemSet((void *)challenge,(int)0, EC_CHALLENGE_BUF_SIZE);
|
||||
|
||||
mprintf("-check registration.. ");
|
||||
miya_log_fprintf(log_fd, "-check registration...");
|
||||
status = CheckRegistration();
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "ecdl.h"
|
||||
|
||||
#include <NitroWiFi/nhttp.h>
|
||||
#include <NitroWiFi/ncfg.h>
|
||||
|
||||
#include </twl/os/common/ownerInfoEx.h>
|
||||
|
||||
@ -62,6 +63,11 @@
|
||||
#define THREAD_COMMAND_USERDATA_AND_WIFI_FUNCTION 3
|
||||
#define THREAD_COMMAND_REBOOT_FUNCTION 4
|
||||
|
||||
|
||||
#define FREE_REG_POWERON_REBOOT 0x00
|
||||
#define FREE_REG_RESTOREMODE_REBOOT 0x55
|
||||
#define FREE_REG_RESTOREMODE_AND_RTC_DONE_REBOOT 0x66
|
||||
|
||||
// #define MIYA_MCU 1
|
||||
|
||||
static BOOL only_wifi_config_data_trans_flag = FALSE;
|
||||
@ -70,7 +76,6 @@ static BOOL no_network_flag = FALSE;
|
||||
static BOOL completed_flag = FALSE;
|
||||
static FSEventHook sSDHook;
|
||||
static BOOL sd_card_flag = FALSE;
|
||||
//static BOOL reboot_flag = FALSE;
|
||||
|
||||
static BOOL ec_download_success_flag = TRUE;
|
||||
|
||||
@ -81,6 +86,7 @@ static BOOL development_console_flag = FALSE;
|
||||
static u8 org_region = 0;
|
||||
static u64 org_fuseId = 0;
|
||||
static volatile BOOL reboot_flag;
|
||||
static BOOL reboot_rtc_adjust_done_flag;
|
||||
|
||||
static int miya_debug_level = 0;
|
||||
|
||||
@ -196,6 +202,80 @@ static BOOL start_my_thread(u32 command)
|
||||
}
|
||||
|
||||
|
||||
static void RTC_NTP_SYNC(void)
|
||||
{
|
||||
RTCDate rtc_date;
|
||||
RTCTime rtc_time;
|
||||
|
||||
if( TRUE == my_ntp_init() ) {
|
||||
rtc_date.year = (u32)( my_ntp_get_year() - 2000 );
|
||||
rtc_date.month = (u32)(my_ntp_get_month() + 1 );
|
||||
rtc_date.day = (u32)my_ntp_get_day();
|
||||
rtc_date.week = (RTCWeek)my_ntp_get_weekday();
|
||||
|
||||
rtc_time.hour = (u32)my_ntp_get_hour();
|
||||
rtc_time.minute = (u32)my_ntp_get_min();
|
||||
rtc_time.second = (u32)my_ntp_get_sec();
|
||||
|
||||
//RTCDate rtc_date;
|
||||
//RTCTime rtc_time;
|
||||
/*
|
||||
typedef enum RTCWeek
|
||||
{
|
||||
RTC_WEEK_SUNDAY = 0, // 日曜日
|
||||
RTC_WEEK_MONDAY, // 月曜日
|
||||
RTC_WEEK_TUESDAY, // 火曜日
|
||||
RTC_WEEK_WEDNESDAY, // 水曜日
|
||||
RTC_WEEK_THURSDAY, // 木曜日
|
||||
RTC_WEEK_FRIDAY, // 金曜日
|
||||
RTC_WEEK_SATURDAY, // 土曜日
|
||||
RTC_WEEK_MAX
|
||||
}
|
||||
RTCWeek;
|
||||
|
||||
typedef struct RTCDate
|
||||
{
|
||||
u32 year; // 年 ( 0 ~ 99 )
|
||||
u32 month; // 月 ( 1 ~ 12 )
|
||||
u32 day; // 日 ( 1 ~ 31 )
|
||||
RTCWeek week; // 曜日
|
||||
|
||||
}
|
||||
RTCDate;
|
||||
|
||||
// 時刻構造体
|
||||
typedef struct RTCTime
|
||||
{
|
||||
u32 hour; // 時 ( 0 ~ 23 )
|
||||
u32 minute; // 分 ( 0 ~ 59 )
|
||||
u32 second; // 秒 ( 0 ~ 59 )
|
||||
|
||||
}
|
||||
RTCTime;
|
||||
*/
|
||||
|
||||
if( RTC_RESULT_SUCCESS != RTC_SetDate( &rtc_date ) ) {
|
||||
mprintf("RTC data adjust error\n");
|
||||
}
|
||||
else {
|
||||
mprintf("RTC data adjust success\n");
|
||||
}
|
||||
|
||||
if( RTC_RESULT_SUCCESS != RTC_SetTime( &rtc_time ) ) {
|
||||
mprintf("RTC time adjust error\n");
|
||||
}
|
||||
else {
|
||||
mprintf("RTC time adjust success\n");
|
||||
}
|
||||
reboot_rtc_adjust_done_flag = TRUE;
|
||||
}
|
||||
else {
|
||||
mprintf("RTC-NTP sync. NG\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static BOOL LoadWlanConfig(void)
|
||||
{
|
||||
u8 buf[256];
|
||||
@ -313,7 +393,14 @@ static BOOL RestoreFromSDCard1(void)
|
||||
ちなみにすでにMydataLoad関数は成功しているものとする。
|
||||
したがって MyData mydata にはデータが入っている。
|
||||
*/
|
||||
if( (mydata.rtc_date_flag == TRUE) && (mydata.rtc_time_flag == TRUE) ) {
|
||||
|
||||
if( reboot_rtc_adjust_done_flag == TRUE ) {
|
||||
mprintf("RTC-NTP sync. already done. ");
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN ); /* green */
|
||||
mprintf("OK.\n");
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||||
}
|
||||
else if( (mydata.rtc_date_flag == TRUE) && (mydata.rtc_time_flag == TRUE) ) {
|
||||
mprintf("RTC data restore ");
|
||||
if( RTC_RESULT_SUCCESS != RTC_SetDate( &(mydata.rtc_date) ) ) {
|
||||
flag = FALSE;
|
||||
@ -372,9 +459,16 @@ static BOOL RestoreFromSDCard2(void)
|
||||
static BOOL RestoreFromSDCard3(void)
|
||||
{
|
||||
// static BOOL SDBackupToSDCard2(void)
|
||||
BOOL flag;
|
||||
if( mydata.wireless_lan_param_flag == TRUE ) {
|
||||
mprintf("WirelessLAN param. restore ");
|
||||
if( TRUE == nvram_restore( MyFile_GetWifiParamFileName() ) ) {
|
||||
flag = nvram_restore( MyFile_GetWifiParamFileName() );
|
||||
if( flag == 3 ) {
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN );
|
||||
mprintf("OK*\n");
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||||
}
|
||||
else if( TRUE == flag ) {
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN );
|
||||
mprintf("OK.\n");
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||||
@ -430,7 +524,8 @@ static BOOL RestoreFromSDCard5(void)
|
||||
if( mydata.num_of_shared2_files > 0 ) {
|
||||
mprintf("App. shared files restore ");
|
||||
if( TRUE == RestoreDirEntryList( MyFile_GetAppSharedListFileName(),
|
||||
MyFile_GetAppSharedRestoreLogFileName(), &list_count, &error_count )) {
|
||||
MyFile_GetAppSharedRestoreLogFileName(),
|
||||
&list_count, &error_count )) {
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_GREEN );
|
||||
mprintf("OK.\n");
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||||
@ -605,7 +700,8 @@ static BOOL RestoreFromSDCard7(void)
|
||||
ret_flag = FALSE;
|
||||
goto end_log_e;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******** ネットワークにつないだ *************/
|
||||
|
||||
// 必須:HTTP と SSL の初期化
|
||||
@ -861,7 +957,7 @@ static void MyThreadProc(void *arg)
|
||||
case THREAD_COMMAND_REBOOT_FUNCTION:
|
||||
mprintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
MCU_SetFreeRegister( 0x00 );
|
||||
MCU_SetFreeRegister( FREE_REG_POWERON_REBOOT );
|
||||
PM_ReadyToExit();
|
||||
OS_Sleep(100000);
|
||||
break;
|
||||
@ -911,7 +1007,7 @@ static void MyThreadProc(void *arg)
|
||||
}
|
||||
if( pushed_power_button == TRUE ) {
|
||||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
MCU_SetFreeRegister( 0x00 );
|
||||
MCU_SetFreeRegister( FREE_REG_POWERON_REBOOT );
|
||||
PM_ReadyToExit();
|
||||
pushed_power_button = FALSE;
|
||||
}
|
||||
@ -951,7 +1047,7 @@ static void MyThreadProcNuc(void *arg)
|
||||
m_set_palette(tc[0], M_TEXT_COLOR_WHITE );
|
||||
mprintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
MCU_SetFreeRegister( 0x00 );
|
||||
MCU_SetFreeRegister( FREE_REG_POWERON_REBOOT );
|
||||
PM_ReadyToExit();
|
||||
pushed_power_button = FALSE;
|
||||
}
|
||||
@ -989,7 +1085,7 @@ static void MyThreadProcNuc(void *arg)
|
||||
}
|
||||
if( pushed_power_button == TRUE ) {
|
||||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
MCU_SetFreeRegister( 0x00 );
|
||||
MCU_SetFreeRegister( FREE_REG_POWERON_REBOOT );
|
||||
PM_ReadyToExit();
|
||||
pushed_power_button = FALSE;
|
||||
}
|
||||
@ -1004,64 +1100,7 @@ static void MyThreadProcNuc(void *arg)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* miya */
|
||||
OS_TPrintf("ntp start\n");
|
||||
if( TRUE == my_ntp_init() ) {
|
||||
RTCDate rtc_date;
|
||||
RTCTime rtc_time;
|
||||
rtc_date.year = (u32)( my_ntp_get_year() - 2000 );
|
||||
rtc_date.month = (u32)(my_ntp_get_month() + 1 );
|
||||
rtc_date.day = (u32)my_ntp_get_day();
|
||||
|
||||
rtc_time.hour = (u32)my_ntp_get_hour();
|
||||
rtc_time.minute = (u32)my_ntp_get_min();
|
||||
rtc_time.second = (u32)my_ntp_get_sec();
|
||||
|
||||
//RTCDate rtc_date;
|
||||
//RTCTime rtc_time;
|
||||
/*
|
||||
typedef enum RTCWeek
|
||||
{
|
||||
RTC_WEEK_SUNDAY = 0, // 日曜日
|
||||
RTC_WEEK_MONDAY, // 月曜日
|
||||
RTC_WEEK_TUESDAY, // 火曜日
|
||||
RTC_WEEK_WEDNESDAY, // 水曜日
|
||||
RTC_WEEK_THURSDAY, // 木曜日
|
||||
RTC_WEEK_FRIDAY, // 金曜日
|
||||
RTC_WEEK_SATURDAY, // 土曜日
|
||||
RTC_WEEK_MAX
|
||||
}
|
||||
RTCWeek;
|
||||
|
||||
|
||||
typedef struct RTCDate
|
||||
{
|
||||
u32 year; // 年 ( 0 ~ 99 )
|
||||
u32 month; // 月 ( 1 ~ 12 )
|
||||
u32 day; // 日 ( 1 ~ 31 )
|
||||
RTCWeek week; // 曜日
|
||||
|
||||
}
|
||||
RTCDate;
|
||||
|
||||
// 時刻構造体
|
||||
typedef struct RTCTime
|
||||
{
|
||||
u32 hour; // 時 ( 0 ~ 23 )
|
||||
u32 minute; // 分 ( 0 ~ 59 )
|
||||
u32 second; // 秒 ( 0 ~ 59 )
|
||||
|
||||
}
|
||||
RTCTime;
|
||||
*/
|
||||
|
||||
if( RTC_RESULT_SUCCESS != RTC_SetDate( &rtc_date ) ) {
|
||||
}
|
||||
if( RTC_RESULT_SUCCESS != RTC_SetTime( &rtc_time ) ) {
|
||||
}
|
||||
}
|
||||
OS_TPrintf("ntp end\n");
|
||||
RTC_NTP_SYNC();
|
||||
|
||||
|
||||
/* NSSL_Init()呼んではダメ! */
|
||||
@ -1085,7 +1124,12 @@ static void MyThreadProcNuc(void *arg)
|
||||
mprintf("\n");
|
||||
text_blink_current_line(tc[0]);
|
||||
mprintf("press A button to start RESTORE\n\n");
|
||||
MCU_SetFreeRegister( 0x55 );
|
||||
if( reboot_rtc_adjust_done_flag == TRUE ) {
|
||||
MCU_SetFreeRegister( FREE_REG_RESTOREMODE_AND_RTC_DONE_REBOOT );
|
||||
}
|
||||
else {
|
||||
MCU_SetFreeRegister( FREE_REG_RESTOREMODE_REBOOT );
|
||||
}
|
||||
while( 1 ) {
|
||||
keyData = m_get_key_code();
|
||||
if ( keyData & (PAD_BUTTON_A | PAD_BUTTON_START) ) {
|
||||
@ -1093,7 +1137,7 @@ static void MyThreadProcNuc(void *arg)
|
||||
}
|
||||
if( pushed_power_button == TRUE ) {
|
||||
OS_TPrintf("%s Power button pressed!\n",__FUNCTION__);
|
||||
MCU_SetFreeRegister( 0x00 );
|
||||
MCU_SetFreeRegister( FREE_REG_POWERON_REBOOT );
|
||||
PM_ReadyToExit();
|
||||
pushed_power_button = FALSE;
|
||||
}
|
||||
@ -1227,15 +1271,26 @@ void TwlMain(void)
|
||||
/* OS_IsRebootedなんかおかしい・・ */
|
||||
|
||||
|
||||
#if 1 /* miya */
|
||||
OS_TPrintf("NCFGConfig = %d 0x%04x\n", sizeof(NCFGConfig),sizeof(NCFGConfig));
|
||||
OS_TPrintf("NCFGConfigEx = %d 0x%04x\n", sizeof(NCFGConfigEx), sizeof(NCFGConfigEx));
|
||||
#endif
|
||||
|
||||
MIYA_MCU_Init();
|
||||
|
||||
OS_TPrintf("MCU Free Reg. 0x%02x\n", MCU_GetFreeReg());
|
||||
free_reg = MCU_GetFreeReg();
|
||||
if( free_reg == 0x55 ) {
|
||||
if( free_reg == FREE_REG_RESTOREMODE_REBOOT ) {
|
||||
reboot_flag = TRUE;
|
||||
reboot_rtc_adjust_done_flag = FALSE;
|
||||
}
|
||||
else if( free_reg == FREE_REG_RESTOREMODE_AND_RTC_DONE_REBOOT ) {
|
||||
reboot_flag = TRUE;
|
||||
reboot_rtc_adjust_done_flag = TRUE;
|
||||
}
|
||||
else {
|
||||
reboot_flag = FALSE;
|
||||
reboot_rtc_adjust_done_flag = FALSE;
|
||||
}
|
||||
|
||||
development_console_flag = IsThisDevelopmentConsole();
|
||||
@ -1693,7 +1748,12 @@ void TwlMain(void)
|
||||
}
|
||||
else if ( keyData & PAD_BUTTON_Y ) {
|
||||
if( FALSE == reboot_flag ) {
|
||||
MCU_SetFreeRegister( 0x55 );
|
||||
if( reboot_rtc_adjust_done_flag == TRUE ) {
|
||||
MCU_SetFreeRegister( FREE_REG_RESTOREMODE_AND_RTC_DONE_REBOOT );
|
||||
}
|
||||
else {
|
||||
MCU_SetFreeRegister( FREE_REG_RESTOREMODE_REBOOT );
|
||||
}
|
||||
OS_RebootSystem();
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
#define BUFSIZE 256 /* バッファサイズ */
|
||||
#define RECVSIZE 4096 /* 受信バッファサイズ */
|
||||
#define TIMEOUT 2 /* タイムアウト秒数 */
|
||||
#define TIMEOUT 3 /* タイムアウト秒数 */
|
||||
|
||||
struct NTP_Packet{ /* NTPパケット */
|
||||
int Control_Word;
|
||||
@ -158,26 +158,27 @@ int my_ntp_get_sec(void)
|
||||
|
||||
BOOL my_ntp_init(void)
|
||||
{
|
||||
SOCPollFD pfds[1];
|
||||
SOCPollFD pfds[1];
|
||||
BOOL ret_flag = TRUE;
|
||||
|
||||
if( GetNTPSRV() == NULL ) {
|
||||
OS_TPrintf("no NTP server entry\n");
|
||||
mprintf("no NTP server entry\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
OS_TPrintf("NTP srv %s\n",GetNTPSRV() );
|
||||
mprintf("NTP server: %s\n",GetNTPSRV() );
|
||||
|
||||
|
||||
// STD_StrCpy(svName, "ntp.jst.mfeed.ad.jp" );
|
||||
STD_StrCpy(svName, GetNTPSRV() );
|
||||
//Name: ntp.jst.mfeed.ad.jp
|
||||
//Addresses: 210.173.160.57, 210.173.160.87, 210.173.160.27
|
||||
|
||||
|
||||
/* ソケットを作成する処理 */
|
||||
/* UDPモードでsocにソケットを作成します */
|
||||
soc = SOC_Socket(SOC_PF_INET, SOC_SOCK_DGRAM, 0);
|
||||
if(soc < 0 ){
|
||||
OS_TPrintf("Error: create Socket\n");
|
||||
mprintf("Error: create Socket\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -188,13 +189,15 @@ BOOL my_ntp_init(void)
|
||||
// int SOC_Bind(int s, const void* sockAddr);
|
||||
// SOC_HtoNs(hostshort)
|
||||
|
||||
sockname.family = SOC_AF_INET; /* インターネットの場合 */
|
||||
sockname.addr.addr = SOC_INADDR_ANY; /* 自分のIPアドレスを使うようにする */
|
||||
sockname.port = SOC_HtoNs((unsigned short)local_port); /* 受信するポート番号 */
|
||||
sockname.family = SOC_AF_INET; /* インターネットの場合 */
|
||||
sockname.addr.addr = SOC_INADDR_ANY; /* 自分のIPアドレスを使うようにする */
|
||||
sockname.port = SOC_HtoNs((unsigned short)local_port); /* 受信するポート番号 */
|
||||
// STD_MemSet((void *)sockname.zero,(int)0,sizeof(sockname.zero));
|
||||
if(SOC_Bind(soc, (void *)&sockname) < 0 ){
|
||||
OS_TPrintf("Error: specify recv port\n");
|
||||
return FALSE;
|
||||
mprintf("Error: invalid recv port %d\n",local_port);
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
}
|
||||
|
||||
|
||||
@ -220,14 +223,16 @@ BOOL my_ntp_init(void)
|
||||
// int SOC_Close(int s);
|
||||
|
||||
// serveraddr = (210) | (173 << 8) | (160 << 16) | (57 << 24);
|
||||
// Addresses: 210.173.160.57, 210.173.160.87, 210.173.160.27
|
||||
|
||||
|
||||
/* サーバ名(svName)からサーバのホスト情報を取得します */
|
||||
serverhostent = SOC_GetHostByName(svName);
|
||||
if(serverhostent == NULL) {
|
||||
OS_TPrintf("Error: SOC_GetHostByName %s\n",svName);
|
||||
/* ソケットを破棄する */
|
||||
(void)SOC_Close(soc);
|
||||
return FALSE;
|
||||
mprintf("Error: SOC_GetHostByName %s\n",svName);
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
}
|
||||
else{
|
||||
/* サーバのホスト情報からIPアドレスをserveraddrにコピーします */
|
||||
@ -240,6 +245,12 @@ BOOL my_ntp_init(void)
|
||||
((serveraddr >> 8) & 0xff),
|
||||
((serveraddr >> 16) & 0xff),
|
||||
((serveraddr >> 24) & 0xff) );
|
||||
|
||||
mprintf(" IP addr : %d.%d.%d.%d\n",
|
||||
((serveraddr >> 0) & 0xff),
|
||||
((serveraddr >> 8) & 0xff),
|
||||
((serveraddr >> 16) & 0xff),
|
||||
((serveraddr >> 24) & 0xff) );
|
||||
#endif
|
||||
|
||||
|
||||
@ -263,15 +274,12 @@ BOOL my_ntp_init(void)
|
||||
NTP_Send.transmit_timestamp_fractions = 0;
|
||||
|
||||
|
||||
|
||||
// int SOC_SendTo(int s, const void* buf, int len, int flags, const void* sockTo)
|
||||
|
||||
/* サーバを指定してNTPパケットを送信する */
|
||||
if(SOC_SendTo(soc,(const void *)&NTP_Send, sizeof( NTP_Send ),0,(const void *)&serversockaddr) < 0 ) {
|
||||
OS_TPrintf("Error: サーバへの送信失敗\n");
|
||||
/* ソケットを破棄する */
|
||||
(void)SOC_Close(soc);
|
||||
return FALSE;
|
||||
mprintf("Error: SOC_SendTo\n");
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
}
|
||||
|
||||
|
||||
@ -292,19 +300,26 @@ BOOL my_ntp_init(void)
|
||||
pfds[0].events = SOC_POLLRDNORM;
|
||||
if( SOC_Poll( pfds, 1, OS_MilliSecondsToTicks( TIMEOUT * 1000 ) ) < 0 ) {
|
||||
OS_TPrintf("Error: recv error\n");
|
||||
/* ソケットを破棄する */
|
||||
(void)SOC_Close(soc);
|
||||
return FALSE;
|
||||
mprintf("Error: recv error\n");
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
}
|
||||
switch( pfds[0].revents ) {
|
||||
case SOC_POLLERR: // ソケットにエラーが発生しました。
|
||||
OS_TPrintf("Error: SOC_POLLERR %s %d\n",__FUNCTION__,__LINE__);
|
||||
mprintf("Error: SOC_POLLERR %s %d\n",__FUNCTION__,__LINE__);
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
break;
|
||||
case SOC_POLLHUP: // ストリーム・ソケットが未接続です。
|
||||
OS_TPrintf("Error: SOC_POLLHUP %s %d\n",__FUNCTION__,__LINE__);
|
||||
mprintf("Error: SOC_POLLHUP %s %d\n",__FUNCTION__,__LINE__);
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
break;
|
||||
case SOC_POLLNVAL: // 不正なソケット記述子です。
|
||||
OS_TPrintf("Error: SOC_POLLNVAL %s %d\n",__FUNCTION__,__LINE__);
|
||||
mprintf("Error: SOC_POLLNVAL %s %d\n",__FUNCTION__,__LINE__);
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -315,21 +330,21 @@ BOOL my_ntp_init(void)
|
||||
/* サーバを指定して受信を行う */
|
||||
// int SOC_RecvFrom(int s, void* buf, int len, int flags, void* sockFrom);
|
||||
sockaddr_Size = sizeof(serversockaddr);
|
||||
if(SOC_RecvFrom(soc, (char *)&NTP_Recv, sizeof(NTP_Recv), 0 ,(void *)&serversockaddr) < 0 ){
|
||||
OS_TPrintf("Error: サーバからの受信失敗\n");
|
||||
/* ソケットを破棄する */
|
||||
(void)SOC_Close(soc);
|
||||
return FALSE;
|
||||
if( SOC_RecvFrom(soc, (char *)&NTP_Recv, sizeof(NTP_Recv), SOC_MSG_DONTWAIT ,(void *)&serversockaddr) < 0 ){
|
||||
OS_TPrintf("Error: SOC_RecvFrom\n");
|
||||
mprintf("Error: SOC_RecvFrom\n");
|
||||
ret_flag = FALSE;
|
||||
goto exit_label1;
|
||||
}
|
||||
|
||||
|
||||
/* NTPサーバから取得した時刻を現地時間に変換する */
|
||||
// ntp_time = ntohl(NTP_Recv.transmit_timestamp_seconds) - 2208988800; /* 1970/01/01 からの秒数に変換 */
|
||||
ntp_time = SOC_NtoHl(NTP_Recv.transmit_timestamp_seconds) - 2208988800; /* 1970/01/01 からの秒数に変換 */
|
||||
|
||||
OS_TPrintf("ntp_time = %d\n",ntp_time);
|
||||
|
||||
OS_TPrintf("TimeZone %d\n", GetTimeZone());
|
||||
mprintf(" TimeZone : %d:%02d\n", (GetTimeZone()/60), (GetTimeZone()%60));
|
||||
|
||||
ntp_time += (60*GetTimeZone());
|
||||
|
||||
@ -346,7 +361,9 @@ BOOL my_ntp_init(void)
|
||||
// tm.tm_yday;
|
||||
// tm.tm_isdst;
|
||||
|
||||
exit_label1:
|
||||
/* ソケットを破棄する処理 */
|
||||
(void)SOC_Close(soc);
|
||||
return TRUE;
|
||||
|
||||
return ret_flag;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user