Fork of ble-x-nucleo-idb0xa1 with changes required by BleStarMbed

Dependents:   ble-star-mbed

Committer:
lorevee
Date:
Tue Feb 20 11:07:16 2018 +0000
Revision:
0:ac0b0725c6fa
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lorevee 0:ac0b0725c6fa 1 /******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
lorevee 0:ac0b0725c6fa 2 * File Name : ble_list.c
lorevee 0:ac0b0725c6fa 3 * Author : AMS - HEA&RF BU
lorevee 0:ac0b0725c6fa 4 * Version : V1.0.0
lorevee 0:ac0b0725c6fa 5 * Date : 19-July-2012
lorevee 0:ac0b0725c6fa 6 * Description : Circular Linked List Implementation.
lorevee 0:ac0b0725c6fa 7 ********************************************************************************
lorevee 0:ac0b0725c6fa 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
lorevee 0:ac0b0725c6fa 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
lorevee 0:ac0b0725c6fa 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
lorevee 0:ac0b0725c6fa 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
lorevee 0:ac0b0725c6fa 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
lorevee 0:ac0b0725c6fa 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
lorevee 0:ac0b0725c6fa 14 *******************************************************************************/
lorevee 0:ac0b0725c6fa 15
lorevee 0:ac0b0725c6fa 16 /******************************************************************************
lorevee 0:ac0b0725c6fa 17 * Include Files
lorevee 0:ac0b0725c6fa 18 ******************************************************************************/
lorevee 0:ac0b0725c6fa 19 #include <ble_hal_types.h>
lorevee 0:ac0b0725c6fa 20 #include "ble_list.h"
lorevee 0:ac0b0725c6fa 21
lorevee 0:ac0b0725c6fa 22 /******************************************************************************
lorevee 0:ac0b0725c6fa 23 * Function Definitions
lorevee 0:ac0b0725c6fa 24 ******************************************************************************/
lorevee 0:ac0b0725c6fa 25 void list_init_head (tListNode * listHead)
lorevee 0:ac0b0725c6fa 26 {
lorevee 0:ac0b0725c6fa 27 listHead->next = listHead;
lorevee 0:ac0b0725c6fa 28 listHead->prev = listHead;
lorevee 0:ac0b0725c6fa 29 }
lorevee 0:ac0b0725c6fa 30
lorevee 0:ac0b0725c6fa 31 uint8_t list_is_empty (tListNode * listHead)
lorevee 0:ac0b0725c6fa 32 {
lorevee 0:ac0b0725c6fa 33 return ((listHead->next == listHead)? TRUE:FALSE);
lorevee 0:ac0b0725c6fa 34 }
lorevee 0:ac0b0725c6fa 35
lorevee 0:ac0b0725c6fa 36 void list_insert_head (tListNode * listHead, tListNode * node)
lorevee 0:ac0b0725c6fa 37 {
lorevee 0:ac0b0725c6fa 38 node->next = listHead->next;
lorevee 0:ac0b0725c6fa 39 node->prev = listHead;
lorevee 0:ac0b0725c6fa 40 listHead->next = node;
lorevee 0:ac0b0725c6fa 41 (node->next)->prev = node;
lorevee 0:ac0b0725c6fa 42 }
lorevee 0:ac0b0725c6fa 43
lorevee 0:ac0b0725c6fa 44
lorevee 0:ac0b0725c6fa 45 void list_insert_tail (tListNode * listHead, tListNode * node)
lorevee 0:ac0b0725c6fa 46 {
lorevee 0:ac0b0725c6fa 47 node->next = listHead;
lorevee 0:ac0b0725c6fa 48 node->prev = listHead->prev;
lorevee 0:ac0b0725c6fa 49 listHead->prev = node;
lorevee 0:ac0b0725c6fa 50 (node->prev)->next = node;
lorevee 0:ac0b0725c6fa 51 }
lorevee 0:ac0b0725c6fa 52
lorevee 0:ac0b0725c6fa 53
lorevee 0:ac0b0725c6fa 54 void list_remove_node (tListNode * node)
lorevee 0:ac0b0725c6fa 55 {
lorevee 0:ac0b0725c6fa 56 (node->prev)->next = node->next;
lorevee 0:ac0b0725c6fa 57 (node->next)->prev = node->prev;
lorevee 0:ac0b0725c6fa 58 }
lorevee 0:ac0b0725c6fa 59
lorevee 0:ac0b0725c6fa 60
lorevee 0:ac0b0725c6fa 61 void list_remove_head (tListNode * listHead, tListNode ** node )
lorevee 0:ac0b0725c6fa 62 {
lorevee 0:ac0b0725c6fa 63 *node = listHead->next;
lorevee 0:ac0b0725c6fa 64 list_remove_node (listHead->next);
lorevee 0:ac0b0725c6fa 65 (*node)->next = NULL;
lorevee 0:ac0b0725c6fa 66 (*node)->prev = NULL;
lorevee 0:ac0b0725c6fa 67 }
lorevee 0:ac0b0725c6fa 68
lorevee 0:ac0b0725c6fa 69
lorevee 0:ac0b0725c6fa 70 void list_remove_tail (tListNode * listHead, tListNode ** node )
lorevee 0:ac0b0725c6fa 71 {
lorevee 0:ac0b0725c6fa 72 *node = listHead->prev;
lorevee 0:ac0b0725c6fa 73 list_remove_node (listHead->prev);
lorevee 0:ac0b0725c6fa 74 (*node)->next = NULL;
lorevee 0:ac0b0725c6fa 75 (*node)->prev = NULL;
lorevee 0:ac0b0725c6fa 76 }
lorevee 0:ac0b0725c6fa 77
lorevee 0:ac0b0725c6fa 78
lorevee 0:ac0b0725c6fa 79 void list_insert_node_after (tListNode * node, tListNode * ref_node)
lorevee 0:ac0b0725c6fa 80 {
lorevee 0:ac0b0725c6fa 81 node->next = ref_node->next;
lorevee 0:ac0b0725c6fa 82 node->prev = ref_node;
lorevee 0:ac0b0725c6fa 83 ref_node->next = node;
lorevee 0:ac0b0725c6fa 84 (node->next)->prev = node;
lorevee 0:ac0b0725c6fa 85 }
lorevee 0:ac0b0725c6fa 86
lorevee 0:ac0b0725c6fa 87
lorevee 0:ac0b0725c6fa 88 void list_insert_node_before (tListNode * node, tListNode * ref_node)
lorevee 0:ac0b0725c6fa 89 {
lorevee 0:ac0b0725c6fa 90 node->next = ref_node;
lorevee 0:ac0b0725c6fa 91 node->prev = ref_node->prev;
lorevee 0:ac0b0725c6fa 92 ref_node->prev = node;
lorevee 0:ac0b0725c6fa 93 (node->prev)->next = node;
lorevee 0:ac0b0725c6fa 94 }
lorevee 0:ac0b0725c6fa 95
lorevee 0:ac0b0725c6fa 96
lorevee 0:ac0b0725c6fa 97 int list_get_size (tListNode * listHead)
lorevee 0:ac0b0725c6fa 98 {
lorevee 0:ac0b0725c6fa 99 int size = 0;
lorevee 0:ac0b0725c6fa 100 tListNode * temp = listHead->next;
lorevee 0:ac0b0725c6fa 101 while (temp != listHead)
lorevee 0:ac0b0725c6fa 102 {
lorevee 0:ac0b0725c6fa 103 size++;
lorevee 0:ac0b0725c6fa 104 temp = temp->next;
lorevee 0:ac0b0725c6fa 105 }
lorevee 0:ac0b0725c6fa 106 return (size);
lorevee 0:ac0b0725c6fa 107 }
lorevee 0:ac0b0725c6fa 108
lorevee 0:ac0b0725c6fa 109 void list_get_next_node (tListNode * ref_node, tListNode ** node)
lorevee 0:ac0b0725c6fa 110 {
lorevee 0:ac0b0725c6fa 111 *node = ref_node->next;
lorevee 0:ac0b0725c6fa 112 }
lorevee 0:ac0b0725c6fa 113
lorevee 0:ac0b0725c6fa 114
lorevee 0:ac0b0725c6fa 115 void list_get_prev_node (tListNode * ref_node, tListNode ** node)
lorevee 0:ac0b0725c6fa 116 {
lorevee 0:ac0b0725c6fa 117 *node = ref_node->prev;
lorevee 0:ac0b0725c6fa 118 }
lorevee 0:ac0b0725c6fa 119