Пример #1
0
void peer_data_parts_get(pm_peer_data_const_t const * p_peer_data, fds_record_chunk_t * p_chunks, uint16_t * p_n_chunks)
{
    if (p_n_chunks == NULL)
    {
    }
    else if ((p_peer_data == NULL) || (p_chunks == NULL))
    {
        *p_n_chunks = 0;
    }
    else
    {
        switch (p_peer_data->data_type)
        {
            case PM_PEER_DATA_ID_BONDING:
                p_chunks[0].p_data       = p_peer_data->data.p_bonding_data;
                p_chunks[0].length_words = p_peer_data->length_words;
                *p_n_chunks = 1;
                break;
            case PM_PEER_DATA_ID_SERVICE_CHANGED_PENDING:
                p_chunks[0].p_data       = p_peer_data->data.p_service_changed_pending;
                p_chunks[0].length_words = p_peer_data->length_words;
                *p_n_chunks = 1;
                break;
            case PM_PEER_DATA_ID_GATT_LOCAL:
                p_chunks[0].p_data       = p_peer_data->data.p_local_gatt_db;
                p_chunks[0].length_words = PM_N_WORDS(PM_LOCAL_DB_LEN_OVERHEAD_BYTES);
                p_chunks[1].p_data       = p_peer_data->data.p_local_gatt_db->p_data;
                p_chunks[1].length_words = p_peer_data->length_words - p_chunks[0].length_words;
                *p_n_chunks = 2;
                break;
            case PM_PEER_DATA_ID_GATT_REMOTE:
                p_chunks[0].p_data       = p_peer_data->data.p_remote_gatt_db;
                p_chunks[0].length_words = PM_N_WORDS(PM_REMOTE_DB_LEN_OVERHEAD_BYTES);
                p_chunks[1].p_data       = p_peer_data->data.p_remote_gatt_db->p_data;
                p_chunks[1].length_words = p_peer_data->length_words - p_chunks[0].length_words;
                *p_n_chunks = 2;
                break;
            case PM_PEER_DATA_ID_APPLICATION:
                p_chunks[0].p_data       = p_peer_data->data.p_application_data;
                p_chunks[0].length_words = p_peer_data->length_words;
                *p_n_chunks = 1;
                break;
            default:
                *p_n_chunks = 0;
                break;
        }
    }
}
Пример #2
0
static void peer_data_point_to_buffer(pm_peer_data_t * p_peer_data, pm_peer_data_id_t data_id, uint8_t * p_buffer_memory, uint16_t n_bufs)
{
    uint16_t n_bytes = n_bufs * PDB_WRITE_BUF_SIZE;
    p_peer_data->data_type    = data_id;

    switch(p_peer_data->data_type)
    {
        case PM_PEER_DATA_ID_BONDING:
            p_peer_data->data.p_bonding_data = (pm_peer_data_bonding_t *)p_buffer_memory;
            p_peer_data->length_words = PM_BONDING_DATA_N_WORDS();
            break;
        case PM_PEER_DATA_ID_SERVICE_CHANGED_PENDING:
            p_peer_data->data.p_service_changed_pending = (bool *)p_buffer_memory;
            p_peer_data->length_words = PM_SC_STATE_N_WORDS();
            break;
        case PM_PEER_DATA_ID_GATT_LOCAL:
            p_peer_data->data.p_local_gatt_db = (pm_peer_data_local_gatt_db_t *)p_buffer_memory;
            p_peer_data->length_words = PM_LOCAL_DB_N_WORDS(n_bytes);
            break;
        case PM_PEER_DATA_ID_GATT_REMOTE:
            p_peer_data->data.p_remote_gatt_db = (pm_peer_data_remote_gatt_db_t *)p_buffer_memory;
            p_peer_data->length_words = PM_REMOTE_DB_N_WORDS(n_bytes / sizeof(ble_gatt_db_srv_t));
            break;
        case PM_PEER_DATA_ID_APPLICATION:
            p_peer_data->data.p_application_data = p_buffer_memory;
            p_peer_data->length_words = PM_N_WORDS(n_bytes);
            break;
        default:
            p_peer_data->length_words = 0;
            break;
    }
}