Example #1
0
void FreqData_Init(void)
{
	Ringbuf_Init(&s_frequencyBuffer, (uint8_t*)s_freqData, sizeof(uint16_t), BUFFER_SIZE, true);
	Ringbuf_Init(&s_averageBuffer, (uint8_t*)s_averageData, sizeof(uint16_t), BUFFER_SIZE, true);
	
	// Fill the buffers with ideal frequency values
	uint8_t i = 0;
	uint16_t freq = IDEAL_F_MAINS * 1000U;

	for (i = 0; i < BUFFER_SIZE; ++i)
	{	
		Ringbuf_Put(&s_frequencyBuffer, (uint8_t*)&freq);
	}
}
Example #2
0
/**************************************************************************
* Description: initializes the BACnet library
* Returns: none
* Notes: none
**************************************************************************/
void bacnet_init(void)
{
    unsigned i;

    Ringbuf_Init(&Receive_Queue, (uint8_t *) & Receive_Buffer,
        sizeof(struct mstp_rx_packet), MSTP_RECEIVE_PACKET_COUNT);
    dlmstp_init(NULL);
    /* initialize objects */
    Device_Init(NULL);
    /* set up our confirmed service unrecognized service handler - required! */
    apdu_set_unrecognized_service_handler_handler
        (handler_unrecognized_service);
    /* we need to handle who-is to support dynamic device binding */
    apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS, handler_who_is);
    apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_HAS, handler_who_has);
    /* Set the handlers for any confirmed services that we support. */
    /* We must implement read property - it's required! */
    apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,
        handler_read_property);
    apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROP_MULTIPLE,
        handler_read_property_multiple);
    apdu_set_confirmed_handler(SERVICE_CONFIRMED_REINITIALIZE_DEVICE,
        handler_reinitialize_device);
    apdu_set_confirmed_handler(SERVICE_CONFIRMED_WRITE_PROPERTY,
        handler_write_property);
    /* handle communication so we can shut up when asked */
    apdu_set_confirmed_handler(SERVICE_CONFIRMED_DEVICE_COMMUNICATION_CONTROL,
        handler_device_communication_control);
    /* start the cyclic 1 second timer for DCC */
    timer_interval_start_seconds(&DCC_Timer, DCC_CYCLE_SECONDS);
    /* start the cyclic 1 second timer for COV */
    timer_interval_start_seconds(&COV_Timer, COV_CYCLE_SECONDS);
    /* start the cyclic 1 second timer for TSM */
    timer_interval_start_seconds(&TSM_Timer, TSM_CYCLE_SECONDS);
	for (i = 0; i < MAX_ANALOG_INPUTS; i++) {
        Analog_Input_Units_Set(
            Analog_Input_Index_To_Instance(i),
            UNITS_PERCENT);
    }
}
/* test the ring buffer */
static void testRingBuf(
    Test * pTest,
    uint8_t * data_store,
    uint8_t * data_element,
    unsigned element_size,
    unsigned element_count)
{
    RING_BUFFER test_buffer;
    volatile uint8_t *test_data;
    unsigned index;
    unsigned data_index;
    bool status;

    Ringbuf_Init(&test_buffer, data_store, element_size, element_count);
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    for (data_index = 0; data_index < element_size; data_index++) {
        data_element[data_index] = data_index;
    }
    status = Ringbuf_Put(&test_buffer, data_element);
    ct_test(pTest, status == true);
    ct_test(pTest, !Ringbuf_Empty(&test_buffer));

    test_data = Ringbuf_Peek(&test_buffer);
    for (data_index = 0; data_index < element_size; data_index++) {
        ct_test(pTest, test_data[data_index] == data_element[data_index]);
    }
    ct_test(pTest, !Ringbuf_Empty(&test_buffer));
    (void) Ringbuf_Pop(&test_buffer, NULL);
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    /* fill to max */
    for (index = 0; index < element_count; index++) {
        for (data_index = 0; data_index < element_size; data_index++) {
            data_element[data_index] = index;
        }
        status = Ringbuf_Put(&test_buffer, data_element);
        ct_test(pTest, status == true);
        ct_test(pTest, !Ringbuf_Empty(&test_buffer));
    }
    /* verify actions on full buffer */
    for (index = 0; index < element_count; index++) {
        for (data_index = 0; data_index < element_size; data_index++) {
            data_element[data_index] = index;
        }
        status = Ringbuf_Put(&test_buffer, data_element);
        ct_test(pTest, status == false);
        ct_test(pTest, !Ringbuf_Empty(&test_buffer));
    }

    /* check buffer full */
    for (index = 0; index < element_count; index++) {
        test_data = Ringbuf_Peek(&test_buffer);
        ct_test(pTest, test_data);
        if (test_data) {
            for (data_index = 0; data_index < element_size; data_index++) {
                ct_test(pTest, test_data[data_index] == index);
            }
        }
        (void) Ringbuf_Pop(&test_buffer, NULL);
    }
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    testRingAroundBuffer(pTest, &test_buffer, data_element, element_size,
        element_count);

    /* adjust the internal index of Ringbuf to test unsigned wrapping */
    test_buffer.head = UINT_MAX - 1;
    test_buffer.tail = UINT_MAX - 1;

    testRingAroundBuffer(pTest, &test_buffer, data_element, element_size,
        element_count);

    return;
}
Example #4
0
void testRingBuf(
    Test * pTest)
{
    RING_BUFFER test_buffer;
    char data_store[RING_BUFFER_DATA_SIZE * RING_BUFFER_COUNT];
    char data[RING_BUFFER_DATA_SIZE];
    char *test_data;
    unsigned index;
    unsigned data_index;
    unsigned count;
    unsigned dummy;
    bool status;

    Ringbuf_Init(&test_buffer, data_store, RING_BUFFER_DATA_SIZE,
        RING_BUFFER_COUNT);
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
        data[data_index] = data_index;
    }
    status = Ringbuf_Put(&test_buffer, data);
    ct_test(pTest, status == true);
    ct_test(pTest, !Ringbuf_Empty(&test_buffer));

    test_data = Ringbuf_Get_Front(&test_buffer);
    for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
        ct_test(pTest, test_data[data_index] == data[data_index]);
    }
    ct_test(pTest, !Ringbuf_Empty(&test_buffer));

    test_data = Ringbuf_Pop_Front(&test_buffer);
    for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
        ct_test(pTest, test_data[data_index] == data[data_index]);
    }
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    /* fill to max */
    for (index = 0; index < RING_BUFFER_COUNT; index++) {
        for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
            data[data_index] = index;
        }
        status = Ringbuf_Put(&test_buffer, data);
        ct_test(pTest, status == true);
        ct_test(pTest, !Ringbuf_Empty(&test_buffer));
    }
    /* verify actions on full buffer */
    for (index = 0; index < RING_BUFFER_COUNT; index++) {
        for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
            data[data_index] = index;
        }
        status = Ringbuf_Put(&test_buffer, data);
        ct_test(pTest, status == false);
        ct_test(pTest, !Ringbuf_Empty(&test_buffer));
    }

    /* check buffer full */
    for (index = 0; index < RING_BUFFER_COUNT; index++) {
        test_data = Ringbuf_Get_Front(&test_buffer);
        for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
            ct_test(pTest, test_data[data_index] == index);
        }

        test_data = Ringbuf_Pop_Front(&test_buffer);
        for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE; data_index++) {
            ct_test(pTest, test_data[data_index] == index);
        }
    }
    ct_test(pTest, Ringbuf_Empty(&test_buffer));

    /* test the ring around the buffer */
    for (index = 0; index < RING_BUFFER_COUNT; index++) {
        for (count = 1; count < 4; count++) {
            dummy = index * count;
            for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE;
                data_index++) {
                data[data_index] = dummy;
            }
            status = Ringbuf_Put(&test_buffer, data);
            ct_test(pTest, status == true);
        }

        for (count = 1; count < 4; count++) {
            dummy = index * count;
            test_data = Ringbuf_Get_Front(&test_buffer);
            for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE;
                data_index++) {
                ct_test(pTest, test_data[data_index] == dummy);
            }

            test_data = Ringbuf_Pop_Front(&test_buffer);
            for (data_index = 0; data_index < RING_BUFFER_DATA_SIZE;
                data_index++) {
                ct_test(pTest, test_data[data_index] == dummy);
            }
        }
    }
    ct_test(pTest, Ringbuf_Empty(&test_buffer));


    return;
}