mbed library sources. Supersedes mbed-src.

Fork of mbed by teralytic

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
0:9b334a45a8ff
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 #include "W7500x.h"
<> 144:ef7eb2e8f9f7 2 #include "W7500x_gpio.h"
<> 144:ef7eb2e8f9f7 3
<> 144:ef7eb2e8f9f7 4 void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx)
<> 144:ef7eb2e8f9f7 5 {
<> 144:ef7eb2e8f9f7 6 uint32_t i, loop =16;
<> 144:ef7eb2e8f9f7 7 P_Port_Def *px_pcr;
<> 144:ef7eb2e8f9f7 8 P_Port_Def *px_afsr;
<> 144:ef7eb2e8f9f7 9
<> 144:ef7eb2e8f9f7 10 /* Check the parameters */
<> 144:ef7eb2e8f9f7 11 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 12
<> 144:ef7eb2e8f9f7 13 /* DeInit GPIOx Registers */
<> 144:ef7eb2e8f9f7 14 GPIOx->DATA = 0x0000;
<> 144:ef7eb2e8f9f7 15 GPIOx->DATAOUT = 0x0000;
<> 144:ef7eb2e8f9f7 16 //GPIOx->OUTENSET = 0x0000;
<> 144:ef7eb2e8f9f7 17 GPIOx->OUTENCLR = 0xFFFF;
<> 144:ef7eb2e8f9f7 18 //GPIOx->INTENSET = 0x0000;
<> 144:ef7eb2e8f9f7 19 GPIOx->INTENCLR = 0xFFFF;
<> 144:ef7eb2e8f9f7 20 //GPIOx->INTTYPESET = 0x0000;
<> 144:ef7eb2e8f9f7 21 GPIOx->INTTYPECLR = 0xFFFF;
<> 144:ef7eb2e8f9f7 22 //GPIOx->INTPOLSET = 0x0000;
<> 144:ef7eb2e8f9f7 23 GPIOx->INTPOLCLR = 0xFFFF;
<> 144:ef7eb2e8f9f7 24
<> 144:ef7eb2e8f9f7 25
<> 144:ef7eb2e8f9f7 26 /* DeInit GPIOx
<> 144:ef7eb2e8f9f7 27 * Pad Control Register
<> 144:ef7eb2e8f9f7 28 * Pad Extern interrupt Enable Register
<> 144:ef7eb2e8f9f7 29 * Pad Alternate Function Select Register
<> 144:ef7eb2e8f9f7 30 */
<> 144:ef7eb2e8f9f7 31 if (GPIOx == GPIOA)
<> 144:ef7eb2e8f9f7 32 {
<> 144:ef7eb2e8f9f7 33 px_pcr = PA_PCR;
<> 144:ef7eb2e8f9f7 34 px_afsr = PA_AFSR;
<> 144:ef7eb2e8f9f7 35 }
<> 144:ef7eb2e8f9f7 36 else if (GPIOx == GPIOB)
<> 144:ef7eb2e8f9f7 37 {
<> 144:ef7eb2e8f9f7 38 px_pcr = PB_PCR;
<> 144:ef7eb2e8f9f7 39 px_afsr = PB_AFSR;
<> 144:ef7eb2e8f9f7 40 }
<> 144:ef7eb2e8f9f7 41 else if (GPIOx == GPIOC)
<> 144:ef7eb2e8f9f7 42 {
<> 144:ef7eb2e8f9f7 43 px_pcr = PC_PCR;
<> 144:ef7eb2e8f9f7 44 px_afsr = PC_AFSR;
<> 144:ef7eb2e8f9f7 45 }
<> 144:ef7eb2e8f9f7 46 else // if (GPIOx == GPIOD)
<> 144:ef7eb2e8f9f7 47 {
<> 144:ef7eb2e8f9f7 48 px_pcr = (P_Port_Def*)PD_PCR;
<> 144:ef7eb2e8f9f7 49 px_afsr = (P_Port_Def*)PD_AFSR;
<> 144:ef7eb2e8f9f7 50 loop = 5;
<> 144:ef7eb2e8f9f7 51 }
<> 144:ef7eb2e8f9f7 52
<> 144:ef7eb2e8f9f7 53 for(i=0; i<loop; i++)
<> 144:ef7eb2e8f9f7 54 {
<> 144:ef7eb2e8f9f7 55 px_pcr->Port[i] = 0x60;
<> 144:ef7eb2e8f9f7 56 px_afsr->Port[i] = PAD_AF0;
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 }
<> 144:ef7eb2e8f9f7 59 }
<> 144:ef7eb2e8f9f7 60
<> 144:ef7eb2e8f9f7 61 void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
<> 144:ef7eb2e8f9f7 62 {
<> 144:ef7eb2e8f9f7 63 uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
<> 144:ef7eb2e8f9f7 64 P_Port_Def *px_pcr;
<> 144:ef7eb2e8f9f7 65
<> 144:ef7eb2e8f9f7 66 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 67 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
<> 144:ef7eb2e8f9f7 68 // assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
<> 144:ef7eb2e8f9f7 69
<> 144:ef7eb2e8f9f7 70 if (GPIOx == GPIOA) px_pcr = PA_PCR;
<> 144:ef7eb2e8f9f7 71 else if (GPIOx == GPIOB) px_pcr = PB_PCR;
<> 144:ef7eb2e8f9f7 72 else if (GPIOx == GPIOC) px_pcr = PC_PCR;
<> 144:ef7eb2e8f9f7 73 else
<> 144:ef7eb2e8f9f7 74 {
<> 144:ef7eb2e8f9f7 75 px_pcr = (P_Port_Def*)PD_PCR;
<> 144:ef7eb2e8f9f7 76 loop = 5;
<> 144:ef7eb2e8f9f7 77 }
<> 144:ef7eb2e8f9f7 78
<> 144:ef7eb2e8f9f7 79 for(pinpos = 0x00; pinpos < loop; pinpos++)
<> 144:ef7eb2e8f9f7 80 {
<> 144:ef7eb2e8f9f7 81 pos = ((uint32_t)0x01) << pinpos;
<> 144:ef7eb2e8f9f7 82
<> 144:ef7eb2e8f9f7 83 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
<> 144:ef7eb2e8f9f7 84
<> 144:ef7eb2e8f9f7 85 if(currentpin == pos)
<> 144:ef7eb2e8f9f7 86 {
<> 144:ef7eb2e8f9f7 87 if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT)
<> 144:ef7eb2e8f9f7 88 {
<> 144:ef7eb2e8f9f7 89 GPIOx->OUTENSET |= pos;
<> 144:ef7eb2e8f9f7 90 }
<> 144:ef7eb2e8f9f7 91 else // GPIO_Mode_In
<> 144:ef7eb2e8f9f7 92 {
<> 144:ef7eb2e8f9f7 93 GPIOx->OUTENCLR = pos;
<> 144:ef7eb2e8f9f7 94 }
<> 144:ef7eb2e8f9f7 95
<> 144:ef7eb2e8f9f7 96 // Configure pull-up pull-down bits
<> 144:ef7eb2e8f9f7 97 if(GPIO_InitStruct->GPIO_Pad & Px_PCR_PUPD_UP)
<> 144:ef7eb2e8f9f7 98 {
<> 144:ef7eb2e8f9f7 99 px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
<> 144:ef7eb2e8f9f7 100 px_pcr->Port[pinpos] |= Px_PCR_PUPD_UP;
<> 144:ef7eb2e8f9f7 101 }
<> 144:ef7eb2e8f9f7 102 else
<> 144:ef7eb2e8f9f7 103 {
<> 144:ef7eb2e8f9f7 104 px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
<> 144:ef7eb2e8f9f7 105 px_pcr->Port[pinpos] |= Px_PCR_PUPD_DOWN;
<> 144:ef7eb2e8f9f7 106 }
<> 144:ef7eb2e8f9f7 107
<> 144:ef7eb2e8f9f7 108 // Configure Driving stregnth selections bit
<> 144:ef7eb2e8f9f7 109 if(GPIO_InitStruct->GPIO_Pad & Px_PCR_DS_HIGH)
<> 144:ef7eb2e8f9f7 110 {
<> 144:ef7eb2e8f9f7 111 px_pcr->Port[pinpos] |= Px_PCR_DS_HIGH;
<> 144:ef7eb2e8f9f7 112 }
<> 144:ef7eb2e8f9f7 113 else
<> 144:ef7eb2e8f9f7 114 {
<> 144:ef7eb2e8f9f7 115 px_pcr->Port[pinpos] &= ~(Px_PCR_DS_HIGH);
<> 144:ef7eb2e8f9f7 116 }
<> 144:ef7eb2e8f9f7 117
<> 144:ef7eb2e8f9f7 118 // Configure Open Drain selections bit
<> 144:ef7eb2e8f9f7 119 if(GPIO_InitStruct->GPIO_Pad & Px_PCR_OD)
<> 144:ef7eb2e8f9f7 120 {
<> 144:ef7eb2e8f9f7 121 px_pcr->Port[pinpos] |= Px_PCR_OD;
<> 144:ef7eb2e8f9f7 122 }
<> 144:ef7eb2e8f9f7 123 else
<> 144:ef7eb2e8f9f7 124 {
<> 144:ef7eb2e8f9f7 125 px_pcr->Port[pinpos] &= ~(Px_PCR_OD);
<> 144:ef7eb2e8f9f7 126 }
<> 144:ef7eb2e8f9f7 127
<> 144:ef7eb2e8f9f7 128 // Configure Input buffer enable selection bit
<> 144:ef7eb2e8f9f7 129 if(GPIO_InitStruct->GPIO_Pad & Px_PCR_IE)
<> 144:ef7eb2e8f9f7 130 {
<> 144:ef7eb2e8f9f7 131 px_pcr->Port[pinpos] |= Px_PCR_IE;
<> 144:ef7eb2e8f9f7 132 }
<> 144:ef7eb2e8f9f7 133 else
<> 144:ef7eb2e8f9f7 134 {
<> 144:ef7eb2e8f9f7 135 px_pcr->Port[pinpos] &= ~(Px_PCR_IE);
<> 144:ef7eb2e8f9f7 136 }
<> 144:ef7eb2e8f9f7 137
<> 144:ef7eb2e8f9f7 138 // Configure input type (CMOS input or Summit trigger input) select bit
<> 144:ef7eb2e8f9f7 139 if(GPIO_InitStruct->GPIO_Pad & Px_PCR_CS_SUMMIT)
<> 144:ef7eb2e8f9f7 140 {
<> 144:ef7eb2e8f9f7 141 px_pcr->Port[pinpos] |= Px_PCR_CS_SUMMIT;
<> 144:ef7eb2e8f9f7 142 }
<> 144:ef7eb2e8f9f7 143 else
<> 144:ef7eb2e8f9f7 144 {
<> 144:ef7eb2e8f9f7 145 px_pcr->Port[pinpos] &= ~(Px_PCR_CS_SUMMIT);
<> 144:ef7eb2e8f9f7 146 }
<> 144:ef7eb2e8f9f7 147 }
<> 144:ef7eb2e8f9f7 148 }
<> 144:ef7eb2e8f9f7 149 }
<> 144:ef7eb2e8f9f7 150
<> 144:ef7eb2e8f9f7 151 void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
<> 144:ef7eb2e8f9f7 152 {
<> 144:ef7eb2e8f9f7 153 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
<> 144:ef7eb2e8f9f7 154 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
<> 144:ef7eb2e8f9f7 155 GPIO_InitStruct->GPIO_Pad = (GPIOPad_TypeDef)(GPIO_PuPd_UP);
<> 144:ef7eb2e8f9f7 156 }
<> 144:ef7eb2e8f9f7 157
<> 144:ef7eb2e8f9f7 158
<> 144:ef7eb2e8f9f7 159 uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 160 {
<> 144:ef7eb2e8f9f7 161 uint8_t bitstatus = 0x00;
<> 144:ef7eb2e8f9f7 162
<> 144:ef7eb2e8f9f7 163 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 164 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
<> 144:ef7eb2e8f9f7 165
<> 144:ef7eb2e8f9f7 166 if((GPIOx->DATA & GPIO_Pin) != (uint32_t)Bit_RESET)
<> 144:ef7eb2e8f9f7 167 {
<> 144:ef7eb2e8f9f7 168 bitstatus = (uint8_t)Bit_SET;
<> 144:ef7eb2e8f9f7 169 }
<> 144:ef7eb2e8f9f7 170 else
<> 144:ef7eb2e8f9f7 171 {
<> 144:ef7eb2e8f9f7 172 bitstatus = (uint8_t)Bit_RESET;
<> 144:ef7eb2e8f9f7 173 }
<> 144:ef7eb2e8f9f7 174
<> 144:ef7eb2e8f9f7 175 return bitstatus;
<> 144:ef7eb2e8f9f7 176 }
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
<> 144:ef7eb2e8f9f7 179 {
<> 144:ef7eb2e8f9f7 180 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 181 return ((uint16_t)GPIOx->DATA);
<> 144:ef7eb2e8f9f7 182 }
<> 144:ef7eb2e8f9f7 183
<> 144:ef7eb2e8f9f7 184 uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 185 {
<> 144:ef7eb2e8f9f7 186 uint8_t bitstatus = 0x00;
<> 144:ef7eb2e8f9f7 187
<> 144:ef7eb2e8f9f7 188
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 191 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
<> 144:ef7eb2e8f9f7 192
<> 144:ef7eb2e8f9f7 193 if((GPIOx->DATAOUT & GPIO_Pin) != (uint32_t)Bit_RESET)
<> 144:ef7eb2e8f9f7 194 {
<> 144:ef7eb2e8f9f7 195 bitstatus = (uint8_t)Bit_SET;
<> 144:ef7eb2e8f9f7 196 }
<> 144:ef7eb2e8f9f7 197 else
<> 144:ef7eb2e8f9f7 198 {
<> 144:ef7eb2e8f9f7 199 bitstatus = (uint8_t)Bit_RESET;
<> 144:ef7eb2e8f9f7 200 }
<> 144:ef7eb2e8f9f7 201
<> 144:ef7eb2e8f9f7 202 return bitstatus;
<> 144:ef7eb2e8f9f7 203 }
<> 144:ef7eb2e8f9f7 204 uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
<> 144:ef7eb2e8f9f7 205 {
<> 144:ef7eb2e8f9f7 206 /* Check the parameters */
<> 144:ef7eb2e8f9f7 207 assert_param(IS_GPIO_ALLPERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 208 return ((uint16_t)GPIOx->DATAOUT);
<> 144:ef7eb2e8f9f7 209 }
<> 144:ef7eb2e8f9f7 210
<> 144:ef7eb2e8f9f7 211 void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 212 {
<> 144:ef7eb2e8f9f7 213 /* Check the parameters */
<> 144:ef7eb2e8f9f7 214 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 215 assert_param(IS_GPIO_PIN(GPIO_Pin));
<> 144:ef7eb2e8f9f7 216
<> 144:ef7eb2e8f9f7 217 (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = GPIO_Pin;
<> 144:ef7eb2e8f9f7 218 (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = GPIO_Pin;
<> 144:ef7eb2e8f9f7 219 }
<> 144:ef7eb2e8f9f7 220
<> 144:ef7eb2e8f9f7 221 void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 222 {
<> 144:ef7eb2e8f9f7 223 /* Check the parameters */
<> 144:ef7eb2e8f9f7 224 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 225 assert_param(IS_GPIO_PIN(GPIO_Pin));
<> 144:ef7eb2e8f9f7 226
<> 144:ef7eb2e8f9f7 227 (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = ~(GPIO_Pin);
<> 144:ef7eb2e8f9f7 228 (GPIOx->UB_MASKED[(uint8_t)(GPIO_Pin>>8)]) = ~(GPIO_Pin);
<> 144:ef7eb2e8f9f7 229 }
<> 144:ef7eb2e8f9f7 230
<> 144:ef7eb2e8f9f7 231 void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
<> 144:ef7eb2e8f9f7 232 {
<> 144:ef7eb2e8f9f7 233 /* Check the parameters */
<> 144:ef7eb2e8f9f7 234 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 235 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
<> 144:ef7eb2e8f9f7 236 assert_param(IS_GPIO_BIT_ACTION(BitVal));
<> 144:ef7eb2e8f9f7 237
<> 144:ef7eb2e8f9f7 238 (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = BitVal;
<> 144:ef7eb2e8f9f7 239 (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = BitVal;
<> 144:ef7eb2e8f9f7 240 }
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
<> 144:ef7eb2e8f9f7 243 {
<> 144:ef7eb2e8f9f7 244 /* Check the parameters */
<> 144:ef7eb2e8f9f7 245 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
<> 144:ef7eb2e8f9f7 246
<> 144:ef7eb2e8f9f7 247 GPIOx->DATAOUT = PortVal;
<> 144:ef7eb2e8f9f7 248 }
<> 144:ef7eb2e8f9f7 249
<> 144:ef7eb2e8f9f7 250 void HAL_PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF)
<> 144:ef7eb2e8f9f7 251 {
<> 144:ef7eb2e8f9f7 252 int i;
<> 144:ef7eb2e8f9f7 253 uint16_t idx =0x1;
<> 144:ef7eb2e8f9f7 254 assert_param(IS_PAD_Type(Px));
<> 144:ef7eb2e8f9f7 255
<> 144:ef7eb2e8f9f7 256 for(i=0;i<16;i++)
<> 144:ef7eb2e8f9f7 257 {
<> 144:ef7eb2e8f9f7 258 if(GPIO_Pin & (idx<<i))
<> 144:ef7eb2e8f9f7 259 {
<> 144:ef7eb2e8f9f7 260 if(Px == PAD_PA)
<> 144:ef7eb2e8f9f7 261 {
<> 144:ef7eb2e8f9f7 262 assert_param(IS_PA_NUM(i));
<> 144:ef7eb2e8f9f7 263 PA_AFSR->Port[i] &= ~(0x03ul);
<> 144:ef7eb2e8f9f7 264 PA_AFSR->Port[i] |= P_AF;
<> 144:ef7eb2e8f9f7 265 }
<> 144:ef7eb2e8f9f7 266 else if(Px == PAD_PB)
<> 144:ef7eb2e8f9f7 267 {
<> 144:ef7eb2e8f9f7 268 assert_param(IS_PB_NUM(i));
<> 144:ef7eb2e8f9f7 269 PB_AFSR->Port[i] &= ~(0x03ul);
<> 144:ef7eb2e8f9f7 270 PB_AFSR->Port[i] |= P_AF;
<> 144:ef7eb2e8f9f7 271 }
<> 144:ef7eb2e8f9f7 272 else if(Px == PAD_PC)
<> 144:ef7eb2e8f9f7 273 {
<> 144:ef7eb2e8f9f7 274 assert_param(IS_PC_NUM(i));
<> 144:ef7eb2e8f9f7 275 PC_AFSR->Port[i] &= ~(0x03ul);
<> 144:ef7eb2e8f9f7 276 PC_AFSR->Port[i] |= P_AF;
<> 144:ef7eb2e8f9f7 277 }
<> 144:ef7eb2e8f9f7 278 else
<> 144:ef7eb2e8f9f7 279 {
<> 144:ef7eb2e8f9f7 280 assert_param(IS_PD_NUM(i));
<> 144:ef7eb2e8f9f7 281 PD_AFSR->Port[i] &= ~(0x03ul);
<> 144:ef7eb2e8f9f7 282 PD_AFSR->Port[i] |= P_AF;
<> 144:ef7eb2e8f9f7 283 }
<> 144:ef7eb2e8f9f7 284 }
<> 144:ef7eb2e8f9f7 285 }
<> 144:ef7eb2e8f9f7 286 }
<> 144:ef7eb2e8f9f7 287
<> 144:ef7eb2e8f9f7 288 void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 289 {
<> 144:ef7eb2e8f9f7 290 GPIOx->OUTENCLR = GPIO_Pin;
<> 144:ef7eb2e8f9f7 291 }
<> 144:ef7eb2e8f9f7 292
<> 144:ef7eb2e8f9f7 293 void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
<> 144:ef7eb2e8f9f7 294 {
<> 144:ef7eb2e8f9f7 295 GPIOx->OUTENSET = GPIO_Pin;
<> 144:ef7eb2e8f9f7 296 }
<> 144:ef7eb2e8f9f7 297