コード例 #1
0
ファイル: cpu.c プロジェクト: sensysnetworks/u-boot-1.1.1
void rtc_get (struct rtc_time* tm)
{
	RTCCON |= 1;
	tm->tm_year  = BCD2HEX(BCDYEAR);
	tm->tm_mon   = BCD2HEX(BCDMON);
	tm->tm_wday   = BCD2HEX(BCDDATE);
	tm->tm_mday   = BCD2HEX(BCDDAY);
	tm->tm_hour  = BCD2HEX(BCDHOUR);
	tm->tm_min  = BCD2HEX(BCDMIN);
	tm->tm_sec  = BCD2HEX(BCDSEC);

	if (tm->tm_sec==0) {
		/* we have to re-read the rtc data because of the "one second deviation" problem */
		/* see RTC datasheet for more info about it */
		tm->tm_year  = BCD2HEX(BCDYEAR);
		tm->tm_mon   = BCD2HEX(BCDMON);
		tm->tm_mday   = BCD2HEX(BCDDAY);
		tm->tm_wday   = BCD2HEX(BCDDATE);
		tm->tm_hour  = BCD2HEX(BCDHOUR);
		tm->tm_min  = BCD2HEX(BCDMIN);
		tm->tm_sec  = BCD2HEX(BCDSEC);
	}

	RTCCON &= ~1;

	if(tm->tm_year >= 70)
		tm->tm_year += 1900;
	else
		tm->tm_year += 2000;
}
コード例 #2
0
ファイル: app_hmi.c プロジェクト: nathanlnw/tw705_HB_gghypt
void Dayin_Fun(u8 dayin_par)
{
    u8 datatime_str[6];
    u8  drive_illegalstr[666];
    u32  current_u32time = 0; //  当前的时间
    u32  old2day_u32time = 0; //  前2个日历天的时间    current-2x86400 (172800)
    u32  read_u32time = 0;
    u32  read_u32_ENDTime = 0; // 读取记录中结束时间
    u8  i = 0, efftive_counter = 0, check_limit = 0; // check_limit   表示需要检索记录的数目
    u8  print_buf[70];
    u8  leftminute = 0; // 当前分钟数值
    u8  find_chaoshi_record = 0; //

    if(dayin_par == 1)
    {
        memcpy(dayin_chepaihaoma + 17, Vechicle_Info.Vech_Num, 8); //  2
        memcpy(dayin_chepaifenlei + 17, Vechicle_Info.Vech_Type, strlen(Vechicle_Info.Vech_Type)); //  3
        memcpy(dayin_cheliangVIN + 10, Vechicle_Info.Vech_VIN, 17); //  4
        memcpy(dayin_driver_NUM + 13, JT808Conf_struct.Driver_Info.DriveName, 21); //5
        memcpy(dayin_driver_card + 24, Read_ICinfo_Reg.DriverCard_ID, 18); //6
        memcpy((char *)dayin_data_time + 11, (char *)Dis_date, 20); //7
        switch(DaYin)
        {
        case 1:
            if(step(50, 1000))
            {
                Menu_txt_state = 1;
                pMenuItem = &Menu_TXT;
                pMenuItem->show();
                pMenuItem->timetick( 10 );
                pMenuItem->keypress( 10 );

                //-------------------------
                DaYin = 0;
                print_rec_flag = 0;
                GPIO_ResetBits(GPIOB, GPIO_Pin_7); //打印关电

                //-----------------------------------------------------
                print_workingFlag = 0; // 打印状态进行中

                //-----------------------------------------------
            }
            else
            {
                Menu_txt_state = 5;
                pMenuItem = &Menu_TXT;
                pMenuItem->show();
                pMenuItem->timetick( 10 );
                pMenuItem->keypress( 10 );
                //--------------------------------------------
                DaYin++;
                GPIO_SetBits( GPIOB, GPIO_Pin_7 );
            }
            break;
        case 2://车牌号码 9
            printer((const char *)dayin_chepaihaoma);
            printer((const char *)dayin_chepaifenlei);
            printer((const char *)dayin_cheliangVIN);
            printer((const char *)dayin_driver_card);
            if((VdrData.H_15[0] == 0x02) && (Limit_max_SateFlag == 0))
                printer("\r\n速度状态: 异常");
            else
                printer("\r\n速度状态: 正常");
            printer((const char *)dayin_data_time);//00/00/00 00:00:00
            printer("2个日历天内超时驾驶记录:\r\n");
            time_now = Get_RTC(); 	//	RTC  相关
            Time2BCD(datatime_str);
            current_u32time = Time_sec_u32(datatime_str, 6);
            old2day_u32time = current_u32time - 172800; // 2个日历天内的时间
            if(Vdr_Wr_Rd_Offset.V_11H_full)
                check_limit = VDR_11_MAXindex;
            else
                check_limit = Vdr_Wr_Rd_Offset.V_11H_Write;
            if(check_limit)
            {
                for(i = 0; i < check_limit; i++)
                {
                    memset(drive_illegalstr, 0, sizeof(drive_illegalstr));
                    if(get_11h(i, drive_illegalstr) == 0)							//50  packetsize	  num=100
                        continue;
                    read_u32time = Time_sec_u32(drive_illegalstr + 18, 6); // 连续驾驶起始时间
                    read_u32_ENDTime = Time_sec_u32(drive_illegalstr + 24, 6); // 连续驾驶结束时间
                    if(read_u32time >= old2day_u32time)
                    {
                        if((read_u32_ENDTime > read_u32time) && ((read_u32_ENDTime - read_u32time) > (4 * 60 * 60)))
                        {
                            //  结束时间大于起始时间,且差值大于4个小时
                            efftive_counter++;
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n记录 %d:", efftive_counter);
                            printer(print_buf);
                            memcpy(dayin_driver_card + 24, drive_illegalstr, 18); //6
                            printer((const char *)dayin_driver_card);
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n 连续驾驶开始时间: \r\n  20%2d-%d%d-%d%d %d%d:%d%d:%d%d", BCD2HEX(drive_illegalstr[18]), \
                                    BCD2HEX(drive_illegalstr[19]) / 10, BCD2HEX(drive_illegalstr[19]) % 10, BCD2HEX(drive_illegalstr[20]) / 10, BCD2HEX(drive_illegalstr[20]) % 10, \
                                    BCD2HEX(drive_illegalstr[21]) / 10, BCD2HEX(drive_illegalstr[21]) % 10, BCD2HEX(drive_illegalstr[22]) / 10, BCD2HEX(drive_illegalstr[22]) % 10, \
                                    BCD2HEX(drive_illegalstr[23]) / 10, BCD2HEX(drive_illegalstr[23]) % 10);
                            printer(print_buf);
                            memset(print_buf, 0, sizeof(print_buf));
                            sprintf(print_buf, "\r\n 连续驾驶结束时间: \r\n  20%2d-%d%d-%d%d %d%d:%d%d:%d%d", BCD2HEX(drive_illegalstr[24]), \
                                    BCD2HEX(drive_illegalstr[25]) / 10, BCD2HEX(drive_illegalstr[25]) % 10, BCD2HEX(drive_illegalstr[26]) / 10, BCD2HEX(drive_illegalstr[26]) % 10, \
                                    BCD2HEX(drive_illegalstr[27]) / 10, BCD2HEX(drive_illegalstr[27]) % 10, BCD2HEX(drive_illegalstr[28]) / 10, BCD2HEX(drive_illegalstr[28]) % 10, \
                                    BCD2HEX(drive_illegalstr[29]) / 10, BCD2HEX(drive_illegalstr[29]) % 10);
                            printer(print_buf);
                            find_chaoshi_record = enable; // find  record
                        }

                    }
                }

                if(find_chaoshi_record == 0)
                    printer("\r\n无超时驾驶记录\r\n");
            }
            else
                printer("\r\n无超时驾驶记录\r\n");
            // 最近15分钟 平均速度
            printer("\r\n停车前15分钟每分钟平均速度:");
            memset(drive_illegalstr, 0, sizeof(drive_illegalstr));
            leftminute = Api_avrg15minSpd_Content_read(drive_illegalstr);
            if(leftminute == 0)
                printer("\r\n 暂无最近15分钟停车记录");
            else if(leftminute == 105)
            {
                for(i = 0; i < 15; i++)
                {
                    memset(print_buf, 0, sizeof(print_buf));
                    if((drive_illegalstr[i * 7 + 0] == 0) && (drive_illegalstr[i * 7 + 1] == 0) &&
                            (drive_illegalstr[i * 7 + 2] == 0) && (drive_illegalstr[i * 7 + 3] == 0) &&
                            (drive_illegalstr[i * 7 + 4] == 0) && (drive_illegalstr[i * 7 + 5] == 0))
                    {
                        //U3_PutStr("\r\n   NULL");
                        continue;
                    }

                    if((drive_illegalstr[i * 7 + 0] == 0xFF) && (drive_illegalstr[i * 7 + 1] == 0xFF) &&
                            (drive_illegalstr[i * 7 + 2] == 0xFF) && (drive_illegalstr[i * 7 + 3] == 0xFF) &&
                            (drive_illegalstr[i * 7 + 4] == 0xFF) && (drive_illegalstr[i * 7 + 5] == 0xFF))
                    {
                        //U3_PutStr("\r\n   NULL");
                        continue;
                    }

                    sprintf(print_buf, "\r\n  20%02d-%02d-%02d %02d:%02d  %d km/h", drive_illegalstr[i * 7], \
                            drive_illegalstr[i * 7 + 1], drive_illegalstr[i * 7 + 2], drive_illegalstr[i * 7 + 3], drive_illegalstr[i * 7 + 4], \
                            drive_illegalstr[i * 7 + 6]);
                    printer(print_buf);
                }
            }
            printer("\r\n                        \r\n");
            printer("\r\n\r\n 签名 :   ______________\r\n");
            DaYin++;
            break;
        case 3:
            step(50, 1000);
            DaYin++;
            break;
        case 4:
            step(50, 1000);
            DaYin++;
            break;
        case 5:
            DaYin = 0;
            print_rec_flag = 0;
            GPIO_ResetBits( GPIOB, GPIO_Pin_7 );
            print_workingFlag = 0; // 打印状态进行中

            pMenuItem = &Menu_1_Idle;
            pMenuItem->show();
            break;
        }

    }
}
コード例 #3
0
ファイル: ds1307.c プロジェクト: nts2201/my-projects
//-------------------------------
// Convert month (BCD) to string of Month
// 0x01=January
// 0x02=February
// ...........
// 0x12 = December
// And so on
//------------------------------- 
char * Int2Month(unsigned char month)
{
  return MonthStr[BCD2HEX(month)-1];
}