示例#1
0
s32 CAN_remove_message(PeripheryMessageBuffer * const buffer,
                       PeripheryMessage *message)
{
#ifndef NO_CB

    OUT_DEBUG_2("CAN_remove_message()\r\n");

#endif

    if (buffer && message) {
        s32 ret = CAN_clear_all_msg_chunks(message);
        if (ret < RETURN_NO_ERRORS) {
            OUT_DEBUG_1("CAN_clear_all_msg_chunks() = %d error\r\n", ret);
            return ret;
        }

        // -- remove message item
        if (message->pPrev) // if not first message in the buffer
            message->pPrev->pNext = message->pNext;
        else                // if first
            buffer->pFirstMsg = message->pNext;

        if (message->pNext) // if not last
            message->pNext->pPrev = message->pPrev;
        else                // if last
            buffer->pLastMsg = message->pPrev;

        buffer->buffer_size--;

        Ql_MEM_Free(message);
    }

    return RETURN_NO_ERRORS;
}
示例#2
0
文件: fs.c 项目: victor-tr/armor2016
s32 CREATE_SINGLE_OBJECT_FROM_DB_FILE(char *db_filename, void **pObject, u32 object_size, u8 object_id)
{
//	if (*pObject != NULL) {
//        OUT_DEBUG_1("The object of \"%s\" type already exists in RAM.\r\n", db_filename);
//		return ERR_DB_TABLE_ALREADY_EXISTS_IN_RAM;
//	}

    if (*pObject == NULL)
        *pObject = Ql_MEM_Alloc(object_size);   // in bytes
    if (*pObject == NULL) {
        OUT_DEBUG_1("Failed to get %d bytes from HEAP\r\n", object_size);
		return ERR_GET_NEW_MEMORY_FAILED;
    }

    OUT_DEBUG_2("CREATE_SINGLE_OBJECT_FROM_DB_FILE(\"%s\") on address %p\r\n", db_filename, *pObject);

    s32 offset = object_size * (object_id);
	s32 ret = readFromDbFile(db_filename, *pObject, object_size, offset);  // to read with offset
    if (ret < RETURN_NO_ERRORS) {
        Ql_MEM_Free(*pObject);
        *pObject = NULL;
		OUT_DEBUG_1("readFromDbFile() = %d error for \"%s\" file.\r\n", ret, db_filename);
		return ret;
	}

	return RETURN_NO_ERRORS;
}
示例#3
0
s32 CAN_clear_all_msg_chunks(PeripheryMessage *message)
{
#ifndef NO_CB

    OUT_DEBUG_2("CAN_clear_all_msg_chunks()\r\n");

#endif

    while (message->pkt_chain_head) {
        CANPkt *temp = message->pkt_chain_head->pNext;
        Ql_MEM_Free(message->pkt_chain_head);
        message->pkt_chain_head = temp;
    }

    message->total_data_len = 0;
    message->last_pkt_id = 0;
    message->pkt_chain_head = NULL;
    message->pkt_chain_tail = NULL;

    return RETURN_NO_ERRORS;
}
void proc_main_task(s32 taskId)
{
    s32 ret;
    u32 cnt = 0; 

    char Buff[10]="0.345";
    char* pStr;

    // Register & open UART port
    ret = Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL);
    if (ret < QL_RET_OK)
    {
        Ql_Debug_Trace("Fail to register serial port[%d], ret=%d\r\n", UART_PORT1, ret);
    }
    ret = Ql_UART_Open(UART_PORT1, 115200, FC_NONE);
    if (ret < QL_RET_OK)
    {
        Ql_Debug_Trace("Fail to open serial port[%d], ret=%d\r\n", UART_PORT1, ret);
    }


    APP_DEBUG("OpenCPU: float test !\r\n\r\n");    /* Print out message through DEBUG port */

    test_float();
    test_dis();
    
    // Start message loop of this task
    while (TRUE)
    {
        Ql_OS_GetMessage(&msg);
        switch(msg.message)
        {
        case MSG_ID_USER_START:
            break;
        default:
            break;
        }
    }
    Ql_MEM_Free(pStr);
}
示例#5
0
文件: fs.c 项目: victor-tr/armor2016
s32 CREATE_TABLE_FROM_DB_FILE(char *db_filename, void **pBuffer, u32 *db_file_size)
{
//	if (*pBuffer != NULL) {
//        OUT_DEBUG_1("The table of \"%s\" type already exists in RAM.\r\n", db_filename);
//		return ERR_DB_TABLE_ALREADY_EXISTS_IN_RAM;
//	}

	u32 local_size = 0;         // will be used if "db_file_size" parameter is not specified (is NULL)
    u32 *size = db_file_size ? db_file_size : &local_size;

    s32 ret = Ql_FS_GetSize(db_filename);
    if (ret < 0) return ret;
    else *size = ret;

    if (*pBuffer == NULL)
        *pBuffer = Ql_MEM_Alloc(*size);   // in bytes

    if (*pBuffer == NULL) {
        if (*size != 0) {
            OUT_DEBUG_1("Failed to get %d bytes from HEAP\r\n", *size);
            return ERR_GET_NEW_MEMORY_FAILED;
        } else {
            OUT_DEBUG_1("DB file \"%s\" is empty\r\n", db_filename);
            return ERR_DB_FILE_IS_EMPTY;
        }
    }

    OUT_DEBUG_2("CREATE_TABLE_FROM_DB_FILE(\"%s\") on address %p\r\n", db_filename, *pBuffer);

	ret = readFromDbFile(db_filename, *pBuffer, *size, 0);  // to read entire file
	if (ret < RETURN_NO_ERRORS) {
        Ql_MEM_Free(*pBuffer);
        *pBuffer = NULL;
		OUT_DEBUG_1("readFromDbFile() = %d error for \"%s\" file.\r\n", ret, db_filename);
		return ret;
	}

    Ar_System_writeSizeAllFiles((u32) ret + Ar_System_readSizeAllFiles());
	return RETURN_NO_ERRORS;
}
示例#6
0
s32 rx_handler_groupsState(PultMessageRx *pMsg)
{
    OUT_DEBUG_2("rx_handler_groupsState\r\n");

    ArmingGroup_tbl *pGroups = getArmingGroupTable(NULL);
    ArmingGroup *pGroup = 0;

    u16 dataLen;
    u16 firstGroupPKT = pMsg->complex_msg_part[0];
    u16 groupCountPKT = pMsg->complex_msg_part[1];

    OUT_DEBUG_7("firstGroupPKT: %d, groupCountPKT: %d, pZones->size:  %d\r\n",
                firstGroupPKT, groupCountPKT, pGroups->size);

    if(firstGroupPKT == 0){
        firstGroupPKT = 1;
        groupCountPKT = pGroups->size;
    }
    else {
        // first zone
        if(firstGroupPKT > pGroups->size)
            firstGroupPKT = pGroups->size;

        // zones count
        if(((firstGroupPKT-1) + groupCountPKT) > pGroups->size)
            groupCountPKT = pGroups->size - (firstGroupPKT - 1);
    }
    OUT_DEBUG_7("firstGroupPKT: %d, groupCountPKT: %d\r\n",
                firstGroupPKT, groupCountPKT);


    // buffer size
    dataLen = groupCountPKT / 2;
    if(groupCountPKT % 2) dataLen++;

    // create buffer
    u8 *data = Ql_MEM_Alloc(dataLen + 2);
    if(!data)
    {
        OUT_DEBUG_1("Failed to get %d bytes from HEAP\r\n", dataLen + 2);
        u8 data_err[2] = {RCE_MemoryAllocationError,0};
        reportToPultComplex(data_err, 2, PMC_CommandReject, PMQ_AuxInfoMsg);
        return ERR_GET_NEW_MEMORY_FAILED;
    }

    for(u8 j = 0; j < dataLen + 2; ++j){
        data[j] = 0;
    }

    u16 indexData = 0;
    u8 tempData;
    u8 k;

    data[0] = firstGroupPKT;
    data[1] = groupCountPKT;
        for (u16 i = (firstGroupPKT - 1); i <= (groupCountPKT + firstGroupPKT - 2); ++i) {
            pGroup = &pGroups->t[i];
            k = i - (firstGroupPKT - 1);
            indexData = k / 2 + 2;

            // --- Set  bits
            // bit0: 1-Normal/0-Others
            // bit1: reserved
            // bit2: 1-Armrd /0-Others
            // bit3: 1-Used  /0-Others
            tempData = 0;


            if(TRUE == Ar_GroupState_isArmed(pGroup)){
                tempData  = tempData | 4;
            }

            if(TRUE == Ar_System_isZonesInGroupNormal(pGroup))
                tempData  = tempData | 1;
            // ---

            tempData  = tempData | 8;

            if(k % 2)
                tempData = tempData << 4;

            data[indexData] = data[indexData] | tempData;


        }

//        for (u16 ii = 0; ii <(dataLen + 2); ++ii) {
//            OUT_DEBUG_7("data[%d]: %d \r\n",
//                        ii, data[ii]);
//        }

        reportToPultComplex(data, sizeof(data), PMC_Response_GroupsState, PMQ_AuxInfoMsg);
        Ql_MEM_Free(data);
        return RETURN_NO_ERRORS;


}
示例#7
0
s32 rx_handler_loopsState(PultMessageRx *pMsg)
{
    OUT_DEBUG_2("rx_handler_loopsState \r\n");

    Zone_tbl *pZones = getZoneTable(NULL);
    Zone *pZone = 0;
    ArmingGroup *pGroup = 0;
    u16 dataLen;
    u16 dataLen_1;
    u16 dataLen_2;
    u16 dataLen_3;

    u16 firstZonePKT = pMsg->complex_msg_part[0];
    u16 zoneCountPKT = pMsg->complex_msg_part[1];
    u16 detailLevel =  pMsg->complex_msg_part[2];

    // ----------------------------------------------------------------------
    u8 zoneEnabled;
    u8 zoneState;
    u8 zoneGroupID;
    u8 zoneArmed;
    u8 zoneType;
    u8 zoneLastEventType;

    OUT_DEBUG_7("firstZonePKT: %d, zoneCountPKT: %d, detailLevel: %d, pZones->size:  %d\r\n",
                firstZonePKT, zoneCountPKT, detailLevel, pZones->size);

    if(firstZonePKT == 0){
        firstZonePKT = 1;
        zoneCountPKT = pZones->size;
    }
    else {
        // first zone
        if(firstZonePKT > pZones->size)
            firstZonePKT = pZones->size;

        // zones count
        if(((firstZonePKT-1) + zoneCountPKT) > pZones->size)
            zoneCountPKT = pZones->size - (firstZonePKT - 1);
    }
    OUT_DEBUG_7("firstZonePKT: %d, zoneCountPKT: %d\r\n",
                firstZonePKT, zoneCountPKT);

    //data len
    dataLen_1 = zoneCountPKT / 8;
    if(zoneCountPKT % 8) dataLen_1++;

    dataLen_2 = zoneCountPKT / 2;
    if(zoneCountPKT % 2) dataLen_2++;

    dataLen_3 = zoneCountPKT * 2;


    OUT_DEBUG_7("finis -> dataLen_1: %d, dataLen_2: %d, dataLen_3: %d\r\n",
                    dataLen_1, dataLen_2, dataLen_3);

    // buffer size
    switch (detailLevel){
    case 1:
    case 49:
        dataLen = dataLen_1;
        detailLevel = 1;
        break;
    case 2:
    case 50:
        dataLen = dataLen_2;
        detailLevel = 2;
        break;
    case 3:
    case 51:
    default:
        dataLen = dataLen_3;
        detailLevel = 3;
        break;
    }
    //----------------------------------
    OUT_DEBUG_7("dataLen: %d, detailLevel: %d\r\n",
                dataLen,  detailLevel);

    // create buffer
    u8 *data = Ql_MEM_Alloc(dataLen + 3);
    if(!data)
    {
        OUT_DEBUG_1("Failed to get %d bytes from HEAP\r\n", dataLen + 3);
        u8 data_err[2] = {RCE_MemoryAllocationError,0};
        reportToPultComplex(data_err, 2, PMC_CommandReject, PMQ_AuxInfoMsg);
        return ERR_GET_NEW_MEMORY_FAILED;
    }
    else{//++++++++++++++++++++++++++++++++++++++++++++

    for(u8 j = 0; j < dataLen + 3; ++j){
        data[j] = 0;
    }

    data[0] = firstZonePKT;
    data[1] = zoneCountPKT;
    data[2] = detailLevel;


    u16 indexData = 0;
    u8 counterBit = 0; // from 0 to 7
    u8 zoneStateBuffer = 0;
    u8 zoneTetradaBuffer = 0;
    u8 rorTemplate = 0;
    u8 tempByte = 0;
    u8 triadaByte =0;
    u8 k;

    for (u16 i = (firstZonePKT - 1); i <= (zoneCountPKT + firstZonePKT - 2); ++i) {
        pZone = &pZones->t[i];

        zoneEnabled = (pZone->enabled == TRUE)? 1 : 0;
        zoneState =(pZone->zoneDamage_counter == 0)? 1 : 0;
        zoneGroupID = pZone->group_id;

        pGroup = getArmingGroupByID(pZone->group_id);
        if(!pGroup){
            zoneArmed = 0;
        }
        else {
            zoneArmed = (TRUE == Ar_GroupState_isArmed(pGroup))? 1 : 0;
        }

        zoneType = pZone->zone_type;
        zoneLastEventType = pZone->last_event_type;


        //fill buffer
        switch (detailLevel){
        case 1:
            // поставить zoneArmed
            // в data[indexData]
            // на место counterBit
            // все из i растет


            k = i - (firstZonePKT - 1);
            indexData = k / 8 + 3;
            counterBit = k - (k / 8) * 8;

//                OUT_DEBUG_7("i: %d, k: %d, indexData: %d , counterBit: %d \r\n",
//                            i, k, indexData, counterBit);

            tempByte = zoneState << counterBit;
            data[indexData] = (data[indexData] | tempByte);
            break;
        case 2:
            // в data[indexData]

            k = i - (firstZonePKT - 1);
            indexData = k / 2 + 3;

            //===================
            // формируем triadaByte
            triadaByte = 0;
            triadaByte = triadaByte | zoneEnabled;
            triadaByte = triadaByte << 1;
            triadaByte = triadaByte | zoneArmed;
            triadaByte = triadaByte << 2;
            switch (zoneLastEventType) {

            case ZONE_EVENT_BREAK:
                triadaByte = triadaByte | 1;
                break;
            case ZONE_EVENT_SHORT:
                triadaByte = triadaByte | 2;
                break;
            case ZONE_EVENT_FITTING:
                triadaByte = triadaByte | 3;
                break;
            case ZONE_EVENT_NORMAL:
            default:
                triadaByte = triadaByte | 0;

            }
            //===================




            if(k % 2) triadaByte = triadaByte << 4;

            data[indexData] = (data[indexData] | triadaByte);

            break;
        case 3:
        default:
            // в data[indexData]

            k = i - (firstZonePKT - 1);
            indexData = k * 2 + 3;


            data[indexData] = zoneType << 4;

            //===================
            // формируем triadaByte
            triadaByte = 0;
            triadaByte = triadaByte | zoneEnabled;
            triadaByte = triadaByte << 1;
            triadaByte = triadaByte | zoneArmed;
            triadaByte = triadaByte << 2;
            switch (zoneLastEventType) {

            case ZONE_EVENT_BREAK:
                triadaByte = triadaByte | 1;
                break;
            case ZONE_EVENT_SHORT:
                triadaByte = triadaByte | 2;
                break;
            case ZONE_EVENT_FITTING:
                triadaByte = triadaByte | 3;
                break;
            case ZONE_EVENT_NORMAL:
            default:
                triadaByte = triadaByte | 0;

            }
            //===================
            data[indexData] = data[indexData] | triadaByte;
            data[indexData + 1] = zoneGroupID;
            break;

        }



//            OUT_DEBUG_7("pZone[%d]->enabled: %d , state: %d , group_id: %d, zoneArmed: %d ,  zoneType: , %d  zoneLastEventType: %d \r\n",
//                        i, zoneEnabled, zoneState, zoneGroupID, zoneArmed, zoneType, zoneLastEventType);

    }

//    for (u16 ii = 0; ii <(dataLen + 3); ++ii) {
//        OUT_DEBUG_7("data[%d]: %d \r\n",
//                    ii, data[ii]);

//    }

    reportToPultComplex(data, dataLen + 3, PMC_Response_LoopsState, PMQ_AuxInfoMsg);

    Ql_MEM_Free(data);
    }//++++++++++++++++++++++++++++++++++++++++++
    //-----------------------------------------------------------------------



    return RETURN_NO_ERRORS;
}
示例#8
0
void pultRxBuffer_msg_cleanup_callback(PultMessageRx *msg)
{ if (msg && msg->bComplex && msg->complex_msg_part) Ql_MEM_Free(msg->complex_msg_part); }