Beispiel #1
0
uint8_t    parseUploadVerify(uint16_t ssid,uint16_t crc)
{
    uint16_t u16CRC = 0;
    if( (curSession == 0) || (ssid != curSession) )
    {
        buildAckPacket(CMD_UPLOAD_VERIFY,ERR_SESSION,ssid);
        return 0;
    }

    u16CRC = u16CRC_Calc16((const uint8_t *)APP_START_ADDR, totalSize);

    if(u16CRC != crc)
    {
        buildAckPacket(CMD_UPLOAD_VERIFY,ERR_CRC,ssid);
        return 0;
    }
    if(u32Bootloader_WriteCRC(totalSize,u16CRC) == 0)
    {
        buildAckPacket(CMD_UPLOAD_VERIFY,ERR_WRITE_CRC,ssid);
        return 0;
    }
    buildAckPacket(CMD_UPLOAD_VERIFY,ERR_OK,ssid);
    return 1;

}
Beispiel #2
0
/*****************************************************************************
 ** Function name:  u32BootLoader_AppPresent
 **
 ** Description:	Checks if an application is present by comparing CRC of
 ** 				flash contents with value present at last location in flash.
 **
 ** Parameters:	    None
 **
 ** Returned value: 1 if application present, otherwise 0.
 **
 *****************************************************************************/
uint32_t u32BootLoader_AppPresent(void)
{
    uint16_t u16CRC = 0;
    uint32_t u32AppPresent = 0;
    uint16_t *pu16AppCRC = (uint16_t *)(APP_END_ADDR - 4);
    uint32_t *pu32AppLen = (uint32_t *)(APP_END_ADDR - 8);
    /* Check if a CRC value is present in application flash area */
    if ( (*pu16AppCRC != 0xFFFFUL) && (*pu32AppLen < MAX_FILE_SIZE))
    {
        /* Memory occupied by application CRC is not blank so calculate CRC of
           image in application area of flash memory, and check against this
           CRC.. */
        u16CRC = u16CRC_Calc16((const uint8_t *)APP_START_ADDR, (*pu32AppLen));

        if (*pu16AppCRC == u16CRC)
        {
            u32AppPresent = 1;
        }
    }
    return u32AppPresent;
}
void oa_heartbeat(void)
{
    oa_uint8 i = 0;
    oa_uint8 temp = 0;
    oa_uint16 crcvalue = 0;

    if (2 == g_LoginStatus)
    {
        oa_memset(g_HeartBeat, 0x00, sizeof(g_HeartBeat));
        
        g_HeartBeat[0] = 0xFF;
        g_HeartBeat[1] = 0xFF;
        g_HeartBeat[2] = 0x11;
        g_HeartBeat[3] = g_serial_number/256;
        g_HeartBeat[4] = g_serial_number%256;
        g_serial_number++;

        if (0x8001 == g_serial_number)
        {
            g_serial_number = 0;
        }
        
        g_HeartBeat[5] = 0x04;

        
        g_HeartBeat[6] = g_BatteryPercent;
        
        temp = oa_network_get_signal_level(NULL);

        if ((0 == temp)||(99 == temp))
        {
            g_GSMSignalLevel = 0x00;
        }
        else if (temp <= 8)
        {
            g_GSMSignalLevel = 0x01;
        }
        else if (temp <= 16)
        {
            g_GSMSignalLevel = 0x02;
        }
        else if (temp <= 24)
        {
            g_GSMSignalLevel = 0x03;
        }
        else
        {
            g_GSMSignalLevel = 0x04;
        }
        g_HeartBeat[7] = g_GSMSignalLevel;
        g_HeartBeat[8] = g_ChargeStatus;
        g_HeartBeat[9] = g_DisassemblyStatus;

        g_HeartBeat[10] = 0x00; //reserve
        g_HeartBeat[11] = 0x00;
        g_HeartBeat[12] = 0x00;
        
        crcvalue = u16CRC_Calc16(g_HeartBeat, 13);
        g_HeartBeat[13] = crcvalue/256;
        g_HeartBeat[14] = crcvalue%256;
        g_HeartBeat[15] = 0xEE;
        g_HeartBeat[16] = 0xEE;
        
        OA_DEBUG_USER("oa_heartbeat");
        
        oa_soc_send(g_soc_context.socket_id, g_HeartBeat, 17);
    }
    
    oa_timer_start(OA_TIMER_ID_3, oa_heartbeat, NULL, g_oa_wristband_parameter.Heartbeatperiod*1000);
}