Example #1
0
void ecg_algorithm_handler(void)
{
    if (false == g_ecg_algo_sw) return;
    
    u32 u32Tick = 0;
    char pace = 0;
    s32 s32I = 0, s32II = 0, s32V = 0;
#ifdef _ALG_ECG_RUN_TIME_
    u32 u32curtick;
#endif
    s32 s32Len = ECG_PopAlgoResult(&u32Tick, &s32I, &s32II, &s32V, &pace);
    if (s32Len)//有数据更新
    {
#ifdef _ALG_ECG_RUN_TIME_
        u32curtick = SysTick_Get();
#endif
        g_Is_ecg_algo_run = true;
        l_ecg_PushAlgorithmData(&u32Tick, &s32I, &s32II, &s32V, &pace);
        ecg_algorithm_result();
        g_Is_ecg_algo_run = false;
#ifdef _ALG_ECG_RUN_TIME_
        AIO_printf("\r\nECG ALGO RUN TICK =\t%d\tHR=%d",
                        SysTick_Get()-u32curtick,
                        (u16)p_ecg_algorithm_out->stResult.u32HeartRate);
#endif
    }
}
Example #2
0
static int ecg_algorithm_result(void)
{
    int i32CECGOutItemNum = 0;
    static u32 u32QuickQRSTick = 0;
    i32CECGOutItemNum = l_ecg_PopAlgorithmData((void *)p_ecg_algorithm_out, 1);
    if (i32CECGOutItemNum)//获取到有结果
    {
        ecg_algorithm_PushFilterResult();   //保存滤波后数据
        ecg_algo_refreshAlertType();
        if ((0 != p_ecg_algorithm_out->stResult.u32QuickQRSTick) \
            && (u32QuickQRSTick != p_ecg_algorithm_out->stResult.u32QuickQRSTick))
        {
            ALG_ECG_DBG("QRS:%d,CUR:%d",
                        p_ecg_algorithm_out->stResult.u32QuickQRSTick,
                        SysTick_Get());
            u32QuickQRSTick = p_ecg_algorithm_out->stResult.u32QuickQRSTick;
            ECG_SetDefibrillate();
        }
        ALG_ECG_DBG("BR(%d)ST(%d)C(%d)",
            p_ecg_algorithm_out->stResult.u32HeartRate,
            p_ecg_algorithm_out->stResult.nSTAmpDif,
            p_ecg_algorithm_out->stResult.nHRConfidence);
    }
    return i32CECGOutItemNum;
}
Example #3
0
bool IsOnTime(const unsigned long ulTarget) // 0: less than target time     1: on time or over time with target
{
    if(SysTick_Compare(SysTick_Get(), ulTarget) == -1) // <
    {
        return false;
    }

    return true;
}
void AT_ComnandParser(char c)
{
	static uint32_t RingBuffInit = 0;
	if(RingBuffInit == 0)// int ring buff
	{
		RingBuffInit = 1;
		AT_CmdProcessInit();
	}
	StrComnandParser(SysTick_Get(),AT_ProcessCmd,&AT_CmdParser,cmdCnt,c);
}
Example #5
0
bool IsOverTime(const unsigned long ulBase, unsigned long ulDuration)    // 0: less than target time     1: over the target time
{
    unsigned long u32Target;

    u32Target = ulBase + ulDuration;

    if(SysTick_Compare(SysTick_Get(), u32Target) == 1)  // >
    {
        return true;
    }

    return false;
}
Example #6
0
int gps_parse() {
    unsigned char buf[100];
    unsigned char ch;
    uint32_t t0;
    unsigned int sum, pow10, div10;
    int i1, i2, ilast, ix;
    int latdeg, londeg, latmin, lonmin;
    
    i1 = i2 = ilast = 0;  // to get rid of compiler warnings

    t0 = SysTick_Get();

    while (1) {
        //
        if ( SysTick_DeltaTime_ms(t0) > 100) { // check for timeout at 100 msec intervals
            return 0;
        }
            ch = read_ublox();
            if (ch == 0xff)
                continue;
        if (ch != '$')   // look for "$GPGGA," header
            continue;
        for (i1=0; i1<6; i1++) { 
                buf[i1] = read_ublox();
        }
        if ((buf[2] != 'G') || (buf[3] != 'G') || (buf[4] != 'A'))
            continue;
        for (i1=0; i1<100; i1++) {
                buf[i1] = read_ublox();


            if (buf[i1] == '\r') {
                buf[i1] = 0;
                ilast = i1;
                break;
            }
        }
        //printf("$GPGGA,%s\r\n", buf);

        // i1 = start of search, i2 = end of search (comma), ilast = end of buffer

        // parse utc
        i1 = 0;
        sum = 0;
        pow10 = 1;
        div10 = 0;
        for (ix=0; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        for (ix=(i2-1); ix>=i1; ix--) {
            if (buf[ix] == '.') {
                div10 = 1;
                continue;
            }
            sum += pow10 * (buf[ix] & 0x0F);
            pow10 *= 10;
            div10 *= 10;
        }
        div10 = pow10 / div10;
        gps_gga.utc = sum / div10;
        
        // parse lat
        i1 = i2+1;
        sum = 0;
        pow10 = 1;
        div10 = 0;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        for (ix=(i2-1); ix>=i1; ix--) {
            if (buf[ix] == '.') {
                div10 = 1;
                continue;
            }
            sum += pow10 * (buf[ix] & 0x0F);
            if (ix>i1) {  // to prevent overflow
                pow10 *= 10;
                div10 *= 10;
            }
        }
        div10 = pow10 / div10;
        latdeg = sum / (div10*100);
        latmin = sum - (latdeg*div10*100);
        latmin = (latmin * 100) / 60;  // convert to decimal minutes
        gps_gga.lat = (latdeg*div10*100) + latmin;
        if (div10 > 10000)
            gps_gga.lat /= (div10 / 10000);  // normalize lat minutes to 6 decimal places
            
        // skip N/S field
        i1 = i2+1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == 'S')
                gps_gga.lat = -gps_gga.lat;
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }


        // parse lon
        i1 = i2+1;
        sum = 0;
        pow10 = 1;
        div10 = 0;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        for (ix=(i2-1); ix>=i1; ix--) {
            if (buf[ix] == '.') {
                div10 = 1;
                continue;
            }
            sum += pow10 * (buf[ix] & 0x0F);
            if (ix>i1) {  // to prevent overflow
                pow10 *= 10;
                div10 *= 10;
            }
        }
        div10 = pow10 / div10;
        londeg = sum / (div10*100);
        lonmin = sum - (londeg*div10*100);
        lonmin = (lonmin * 100) / 60;  // convert to decimal minutes
        gps_gga.lon = (londeg*div10*100) + lonmin;        
        if (div10 > 10000)
            gps_gga.lon /= (div10 / 10000);  // normalize lon minutes to 6 decimal places

        // skip E/W field
        i1 = i2+1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == 'W')
                gps_gga.lon = -gps_gga.lon;
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }

        // parse fix
        i1 = i2+1;
        sum = 0;
        pow10 = 1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        gps_gga.fix = buf[i2-1] & 0x0F;
        
        // parse satellites
        i1 = i2+1;
        sum = 0;
        pow10 = 1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        for (ix=(i2-1); ix>=i1; ix--) {
            sum += pow10 * (buf[ix] & 0x0F);
            pow10 *= 10;
        }
        gps_gga.sat = sum;
        
        // skip horz-precision field
        i1 = i2+1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }

        // parse alt
        i1 = i2+1;
        sum = 0;
        pow10 = 1;
        for (ix=i1; ix<ilast; ix++) {
            if (buf[ix] == ',') {
                i2 = ix;
                break;
            }
        }
        for (ix=(i2-1); ix>=i1; ix--) {
            if (buf[ix] == '.')
                continue;
            sum += pow10 * (buf[ix] & 0x0F);
            pow10 *= 10;
        }
        gps_gga.alt = sum / 10;
        

                
        gps_gga.latitude = (float) gps_gga.lat / 1000000.0; //Scale to float
        gps_gga.longitude = (float) gps_gga.lon / 1000000.0; //Scale to float
        gps_gga.altitude = (float) gps_gga.alt; //Scale to float
        return 1;
    }
}
Example #7
0
void ECG_SetDefibrillate(void)
{
    defibrillate_pulse_tick = SysTick_Get() + getTickNumberByMS(100);
    is_defibrillate_run = 1;
	*pPORTFIO_SET = PF0;
}