Contiki-NG
Loading...
Searching...
No Matches
board.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016, Zolertia
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * 3. Neither the name of the copyright holder nor the names of its
15 * contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
29 * OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31/**
32 * \addtogroup zoul-platforms
33 * @{
34 *
35 * \defgroup remote-revb RE-Mote platform revision B
36 *
37 * The RE-Mote was designed jointly with universities and industry partners in
38 * RERUM European project, to ease the development of private and secure
39 * applications for IoT and Smart City applications. The RE-Mote packs several
40 * on-board resources, like a RTC, external WDT, Micro-SD, RF switch and a
41 * Shutdown mode to reduce its power consumption down to 150nA.
42 *
43 * This file provides connectivity information on LEDs, Buttons, UART and
44 * other RE-Mote revision A peripherals
45 *
46 * This file can be used as the basis to configure other platforms using the
47 * cc2538 SoC.
48 * @{
49 *
50 * \file
51 * Header file with definitions related to the I/O connections on the Zolertia's
52 * RE-Mote platform (revision B), cc2538-based
53 *
54 * \note Do not include this file directly. It gets included by contiki-conf
55 * after all relevant directives have been set.
56 */
57#ifndef BOARD_H_
58#define BOARD_H_
59
60#include "dev/gpio.h"
61#include "dev/nvic.h"
62/*---------------------------------------------------------------------------*/
63/** \name Connector headers
64 *
65 * The RE-Mote features two 2.54 mm header rows over which exposes the following
66 * pins (facing up, Zolertia/RERUM logo above, buttons and micro USB at bottom):
67 * ----------------------+---+---+---------------------------------------------
68 * PIN_NAME |JP6|JP5| PIN_NAME
69 * ----------------------+---+---+---------------------------------------------
70 * LED1.R/PD4 |-01|17-| PB2/SPIO0.SCLK/CC1200.SCLK
71 * LED2.G/JTAG.TDO/PB7 |-02|16-| PB1/SPIO0.MOSI/CC1200.MOSI
72 * LED3.B/JTAG.TDI/PB6 |-03|15-| PB3/SPIO0.MISO/CC1200.MISO
73 * UART0.RX/PA0 |-04|14-| PA7/AIN7/USD.CS|ADC5
74 * UART0.TX/PA1 |-05|13-| DGND
75 * PD0 |-06|12-| D+3.3
76 * I2C.SDA/PC2 |-07|11-| PA5/AIN5/ADC1
77 * I2C.SCL/PC3 |-08|10-| PA4/AIN4/ADC2
78 * DGND |-09|09-| DGND
79 * D+3.3 |-10|08-| D+5.0
80 * CC1200.GPIO0/PB4 |-11|07-| PA2/AIN2/ADC3
81 * CC1200.GPIO2/PB0 |-12|06-| PA6/AIN6/USD.SEL|ADC4
82 * UART1.RX/PC1 |-13|05-| PC6/SPI1.MISO
83 * UART1.TX/PC0 |-14|04-| PC5/SPI1.MOSI
84 * DGND |-15|03-| PC4/SPI1.SCLK
85 * D+3.3 |-16|02-| PS+EXT/VIN
86 * CC1200.CS/PB5 |-17|01-| DGND
87 * ----------------------+---+---+---------------------------------------------
88 *
89 * Two auxiliary connectors allow to connect an external LiPo battery and
90 * access to the RESET/user buttons:
91 *
92 * - JP4 (placed below JP6 connector): |1-| DGND, |2-| VBAT
93 * - JP9 (placed above JP5 connector): |1-| BUTTON.RESET, |2-| BUTTON.USER|ADC6
94 */
95/*---------------------------------------------------------------------------*/
96/** \name RE-Mote LED configuration
97 *
98 * LEDs on the RE-Mote are exposed in the JP6 port as follows:
99 * - LED1 (Red) -> PD4
100 * - LED2 (Green) -> PB7 (shared with JTAG.TDO)
101 * - LED3 (Blue) -> PB6 (shared with JTAG.TDI)
102 *
103 * The LEDs are connected to a MOSFET to minimize current draw. The LEDs can
104 * be disabled by removing resistors R12, R13 and R14.
105 * @{
106 */
107/*---------------------------------------------------------------------------*/
108#define LEDS_ARCH_L1_PORT GPIO_D_NUM
109#define LEDS_ARCH_L1_PIN 4
110#define LEDS_ARCH_L2_PORT GPIO_B_NUM
111#define LEDS_ARCH_L2_PIN 7
112#define LEDS_ARCH_L3_PORT GPIO_B_NUM
113#define LEDS_ARCH_L3_PIN 6
114
115#define LEDS_CONF_RED 1
116#define LEDS_CONF_GREEN 2
117#define LEDS_CONF_BLUE 4
118
119#define LEDS_CONF_COUNT 3
120/** @} */
121/*---------------------------------------------------------------------------*/
122/** \name USB configuration
123 *
124 * The USB pullup is enabled by an external resistor, not mapped to a GPIO
125 * @{
126 */
127#ifdef USB_PULLUP_PORT
128#undef USB_PULLUP_PORT
129#endif
130#ifdef USB_PULLUP_PIN
131#undef USB_PULLUP_PIN
132#endif
133/** @} */
134/*---------------------------------------------------------------------------*/
135/** \name UART configuration
136 *
137 * On the RE-Mote, the UARTs are connected to the following ports/pins:
138 *
139 * - UART0:
140 * - RX: PA0, connected to CP2104 serial-to-usb converter TX pin
141 * - TX: PA1, connected to CP2104 serial-to-usb converter RX pin
142 * - UART1:
143 * - RX: PC1
144 * - TX: PC0
145 * - CTS: disabled as default, PD0 may be assigned if not using I2C interrupts
146 * - RTS: disabled as default
147 *
148 * We configure the port to use UART0 and UART1, CTS/RTS only for UART1,
149 * both without a HW pull-up resistor
150 * UART0 and UART1 pins are exposed over the JP6 connector
151 * @{
152 */
153#define UART0_RX_PORT GPIO_A_NUM
154#define UART0_RX_PIN 0
155#define UART0_TX_PORT GPIO_A_NUM
156#define UART0_TX_PIN 1
157
158#define UART1_RX_PORT GPIO_C_NUM
159#define UART1_RX_PIN 1
160#define UART1_TX_PORT GPIO_C_NUM
161#define UART1_TX_PIN 0
162#define UART1_CTS_PORT (-1)
163#define UART1_CTS_PIN (-1)
164#define UART1_RTS_PORT (-1)
165#define UART1_RTS_PIN (-1)
166/** @} */
167/*---------------------------------------------------------------------------*/
168/**
169 * \name ADC configuration
170 *
171 * These values configure which CC2538 pins and ADC channels to use for the ADC
172 * inputs. By default the RE-Mote allows two out-of-the-box ADC ports with a
173 * phidget-like 3-pin connector (GND/VDD/ADC)
174 *
175 * The RE-Mote allows both 3.3V and 5V analogue sensors as follow:
176 *
177 * - ADC1 (PA5): up to 3.3V.
178 * - ADC2 (PA4): up to 3.3V
179 * - ADC3 (PA2): up to 5V, by means of a 2/3 voltage divider.
180 *
181 * Also there are other ADC channels shared by default with Micro SD card and
182 * user button implementations:
183 *
184 * - ADC4 (PA6): up to 3.3V.
185 * - ADC5 (PA7): up to 3.3V.
186 * - ADC6 (PA3): up to 3.3V.
187 *
188 * ADC inputs can only be on port A.
189 * All ADCx are exposed in JP5 connector, but only ADC1 and ADC3 have GND and
190 * VDD (3/5V) pins next to it, so these can be exposed into a 3-pin phidget-like
191 * connector, for ADC2 either solder a wire to connect, or use a 4-pin connector
192 * to expose both ADC1 and ADC2 in a single connector, but this will leave no
193 * space for a ADC3 connector.
194 *
195 * The internal ADC reference is 1190mV, use either a voltage divider as input,
196 * or a different voltage reference, like AVDD5, or externally using PA7/AIN7
197 * and PA6/AIN6 configurable as differential reference, by removing the R26 and
198 * R33 0Ohm resistors to disconnect off the Micro-SD, and those will be
199 * accessible from JP5 connector.
200 *
201 * To enable the ADC[2,4-6], remove any 0Ohm resistors if required (see above),
202 * and define in your application `ADC_SENSORS_CONF_ADCx_PIN` and set its
203 * value with the corresponding pin number (i.e ADC2 to 4 as mapped to PA4).
204 * To disable any ADC[1-6] just define as above, but set to (-1) instead.
205
206 * Warning: if using ADC6 (PA3), you will need to disable the bootloader by
207 * making FLASH_CCA_CONF_BOOTLDR_BACKDOOR equal to zero
208 *
209 * @{
210 */
211#define ADC_SENSORS_PORT GPIO_A_NUM /**< ADC GPIO control port */
212
213#ifndef ADC_SENSORS_CONF_ADC1_PIN
214#define ADC_SENSORS_ADC1_PIN 5 /**< ADC1 to PA5, 3V3 */
215#else
216#if ((ADC_SENSORS_CONF_ADC1_PIN != -1) && (ADC_SENSORS_CONF_ADC1_PIN != 5))
217#error "ADC1 channel should be mapped to PA5 or disabled with -1"
218#else
219#define ADC_SENSORS_ADC1_PIN ADC_SENSORS_CONF_ADC1_PIN
220#endif
221#endif
222
223#ifndef ADC_SENSORS_CONF_ADC3_PIN
224#define ADC_SENSORS_ADC3_PIN 2 /**< ADC3 to PA2, 5V */
225#else
226#if ((ADC_SENSORS_CONF_ADC3_PIN != -1) && (ADC_SENSORS_CONF_ADC3_PIN != 2))
227#error "ADC3 channel should be mapped to PA2 or disabled with -1"
228#else
229#define ADC_SENSORS_ADC3_PIN ADC_SENSORS_CONF_ADC3_PIN
230#endif
231#endif
232
233#ifndef ADC_SENSORS_CONF_ADC2_PIN
234#define ADC_SENSORS_ADC2_PIN (-1) /**< ADC2 no declared */
235#else
236#define ADC_SENSORS_ADC2_PIN 4 /**< Hard-coded to PA4 */
237#endif
238
239#ifndef ADC_SENSORS_CONF_ADC4_PIN
240#define ADC_SENSORS_ADC4_PIN (-1) /**< ADC4 not declared */
241#else
242#define ADC_SENSORS_ADC4_PIN 6 /**< Hard-coded to PA6 */
243#endif
244
245#ifndef ADC_SENSORS_CONF_ADC5_PIN
246#define ADC_SENSORS_ADC5_PIN (-1) /**< ADC5 not declared */
247#else
248#define ADC_SENSORS_ADC5_PIN 7 /**< Hard-coded to PA7 */
249#endif
250
251#ifndef ADC_SENSORS_CONF_ADC6_PIN
252#define ADC_SENSORS_ADC6_PIN (-1) /**< ADC6 not declared */
253#else
254#define ADC_SENSORS_ADC6_PIN 3 /**< Hard-coded to PA3 */
255#endif
256
257#ifndef ADC_SENSORS_CONF_MAX
258#define ADC_SENSORS_MAX 2 /**< Maximum sensors */
259#else
260#define ADC_SENSORS_MAX ADC_SENSORS_CONF_MAX
261#endif
262/** @} */
263/*---------------------------------------------------------------------------*/
264/** \name RE-Mote Button configuration
265 *
266 * Buttons on the RE-Mote are connected as follows:
267 * - BUTTON_USER -> PA3, S1 user button, shared with bootloader
268 * - BUTTON_RESET -> RESET_N line, S2 reset the CC2538
269 * - BUTTON_PWR -> Depending on the enabled resistor, it can be used to reset
270 * the onboard Low-power PIC, provoking a master reset on all
271 * the RE-Mote's onboards components. Note the BUTTON_RESET
272 * only resets the CC2538. This is disabled by default, as
273 * the R45 0Ohm resistor is not soldered on that position
274 * The other R45 position enables a test-button to drive the
275 * SYSOFF pin of the power management block, disconnecting the
276 * battery when used, leaving only powered the RTCC and
277 * Low-Power PIC. Useful if developing applications using the
278 * shutdown mode if required to snap out of it.
279 * @{
280 */
281#define BUTTON_USER_PORT GPIO_A_NUM
282#define BUTTON_USER_PIN 3
283#define BUTTON_USER_VECTOR GPIO_A_IRQn
284
285/* Notify various examples that we have an user button.
286 * If ADC6 channel is used, then disable the user button
287 */
288#ifdef PLATFORM_CONF_WITH_BUTTON
289#if (PLATFORM_CONF_WITH_BUTTON && (ADC_SENSORS_ADC6_PIN == 3))
290#error "The ADC6 (PA3) and user button cannot be enabled at the same time"
291#else
292#define PLATFORM_HAS_BUTTON (PLATFORM_CONF_WITH_BUTTON && \
293 !(ADC_SENSORS_ADC6_PIN == 3))
294#endif /* (PLATFORM_CONF_WITH_BUTTON && (ADC_SENSORS_ADC6_PIN == 3)) */
295#else
296#define PLATFORM_HAS_BUTTON !(ADC_SENSORS_ADC6_PIN == 3)
297#endif /* PLATFORM_CONF_WITH_BUTTON */
298/** @} */
299/*---------------------------------------------------------------------------*/
300/**
301 * \name SPI (SSI0) configuration
302 *
303 * These values configure which CC2538 pins to use for the SPI (SSI0) lines,
304 * reserved exclusively for the CC1200 RF transceiver. These pins are not
305 * exposed to any connector, and should be avoid to use it.
306 * TX -> MOSI, RX -> MISO
307 * @{
308 */
309#define SPI0_CLK_PORT GPIO_B_NUM
310#define SPI0_CLK_PIN 2
311#define SPI0_TX_PORT GPIO_B_NUM
312#define SPI0_TX_PIN 1
313#define SPI0_RX_PORT GPIO_B_NUM
314#define SPI0_RX_PIN 3
315/** @} */
316/*---------------------------------------------------------------------------*/
317/**
318 * \name SPI (SSI1) configuration
319 *
320 * These values configure which CC2538 pins to use for the SPI (SSI1) lines,
321 * shared with the microSD and exposed over JP5 connector.
322 * TX -> MOSI, RX -> MISO
323 * @{
324 */
325#define SPI1_CLK_PORT GPIO_C_NUM
326#define SPI1_CLK_PIN 4
327#define SPI1_TX_PORT GPIO_C_NUM
328#define SPI1_TX_PIN 5
329#define SPI1_RX_PORT GPIO_C_NUM
330#define SPI1_RX_PIN 6
331/** @} */
332/*---------------------------------------------------------------------------*/
333/**
334 * \name I2C configuration
335 *
336 * These values configure which CC2538 pins to use for the I2C lines, exposed
337 * over JP6 connector.
338 * The I2C bus is shared with the on-board RTC and the Low-Power PIC
339 * The I2C is exposed over the JP6 header, using a 5-pin connector with 2.54 mm
340 * spacing, providing also D+3.3V, GND and PD0 pin that can be used as an
341 * interrupt pin if required
342 * @{
343 */
344#define I2C_SCL_PORT GPIO_C_NUM
345#define I2C_SCL_PIN 3
346#define I2C_SDA_PORT GPIO_C_NUM
347#define I2C_SDA_PIN 2
348#define I2C_INT_PORT GPIO_D_NUM
349#define I2C_INT_PIN 0
350#define I2C_INT_VECTOR GPIO_D_IRQn
351/** @} */
352/*---------------------------------------------------------------------------*/
353/**
354 * \name Antenna switch configuration
355 *
356 * These values configure the required pin to drive the RF antenna switch, to
357 * either enable the sub-1Ghz RF interface (power-up the CC1200) or the 2.4GHz
358 * RF interface of the CC2538, both alternatively routed to a RP-SMA connector
359 * to allow using an external antenna for both cases.
360 *
361 * Note it is also possible to enable both RF interfaces at the same time, by
362 * switching On the sub-1GHz RF interface, and placing an 0Ohm resistor (R19),
363 * to select between using a ceramic chip antenna (not mounted), or to connect
364 * and external antenna over a pigtail to the U.Fl connector (not mounted).
365 *
366 * RF switch state:
367 * - LOW: 2.4GHz RF interface on RP-SMA connector, CC1200 powered-off.
368 * - HIGH: Sub-1GHz RF interface on RP-SMA connector.
369 * @{
370 */
371#define ANTENNA_RF_SW_PORT GPIO_D_NUM
372#define ANTENNA_RF_SW_PIN 2
373/** @} */
374/*---------------------------------------------------------------------------*/
375/**
376 * \name Dual RF interface support
377 *
378 * Enables support for dual band operation (both CC1200 and 2.4GHz enabled).
379 * The driver checks the selected Radio stack, and forces the antenna switch to
380 * either position. Enabling the definition below forces to skip this check.
381 * @{
382 */
383#ifndef REMOTE_DUAL_RF_ENABLED
384#define REMOTE_DUAL_RF_ENABLED 0
385#endif
386/** @} */
387/*---------------------------------------------------------------------------*/
388/**
389 * \name CC1200 configuration
390 *
391 * These values configure the required pins to drive the CC1200
392 * None of the following pins are exposed to any connector, kept for internal
393 * use only
394 * @{
395 */
396#define CC1200_SPI_INSTANCE 0
397#define CC1200_SPI_SCLK_PORT SPI0_CLK_PORT
398#define CC1200_SPI_SCLK_PIN SPI0_CLK_PIN
399#define CC1200_SPI_MOSI_PORT SPI0_TX_PORT
400#define CC1200_SPI_MOSI_PIN SPI0_TX_PIN
401#define CC1200_SPI_MISO_PORT SPI0_RX_PORT
402#define CC1200_SPI_MISO_PIN SPI0_RX_PIN
403#define CC1200_SPI_CSN_PORT GPIO_B_NUM
404#define CC1200_SPI_CSN_PIN 5
405#define CC1200_GDO0_PORT GPIO_B_NUM
406#define CC1200_GDO0_PIN 4
407#define CC1200_GDO2_PORT GPIO_B_NUM
408#define CC1200_GDO2_PIN 0
409#define CC1200_RESET_PORT GPIO_C_NUM
410#define CC1200_RESET_PIN 7
411#define CC1200_GPIOx_VECTOR GPIO_B_IRQn
412/** @} */
413/*---------------------------------------------------------------------------*/
414/**
415 * \name microSD configuration
416 *
417 * These values configure the required pins to drive the built-in microSD
418 * external module, to be used with SSI1. USD_CSN and USD_SEL are shared with
419 * ADC4/ADC5, but it is disabled by default as there are 0Ohm resistors
420 * connecting the PA6/PA7 pins to the microSD (see ADC block above for comments)
421 * The USD_SEL pin can be used both as output and input, to detect if there is
422 * a microSD in the slot, or when connected to disable the microSD to save power
423 * @{
424 */
425#define USD_SPI_INSTANCE 1
426#define USD_CLK_PORT SPI1_CLK_PORT
427#define USD_CLK_PIN SPI1_CLK_PIN
428#define USD_MOSI_PORT SPI1_TX_PORT
429#define USD_MOSI_PIN SPI1_TX_PIN
430#define USD_MISO_PORT SPI1_RX_PORT
431#define USD_MISO_PIN SPI1_RX_PIN
432#define USD_CSN_PORT GPIO_A_NUM
433#define USD_CSN_PIN 7
434#define USD_SEL_PORT GPIO_A_NUM
435#define USD_SEL_PIN 6
436/** @} */
437/*---------------------------------------------------------------------------*/
438/**
439 * \name Power management and shutdown mode
440 *
441 * The shutdown mode is an ultra-low power operation mode that effectively
442 * powers-down the entire RE-Mote (CC2538, CC1200, attached sensors, etc) and
443 * only keeps running a the on-board RTC and an ultra-low power consumption MCU
444 * The Shutdown mode allows:
445 *
446 * - Put the board in an ultra-low power sleep (shutdown) drawing <150nA avg.
447 * - Awake the system by scheduling the RTCC to awake the Low-Power PIC after
448 * it disconnects the battery and goes to sleep mode.
449 * - Awake the system by using the Low-Power PIC's timer
450 *
451 * As commented above, S3 can be used to restart the entire board (power
452 * management block included), or to kick the board out of shutdown mode by
453 * reconnecting the battery.
454 * @{
455 */
456#define PM_ENABLE_PORT GPIO_D_NUM
457#define PM_ENABLE_PIN 1
458/** @} */
459/*---------------------------------------------------------------------------*/
460/**
461 * \name On-board RTCC
462 *
463 * The on-board RTCC (real time clock-calendar) is powered over USB/battery,
464 * and it will remain powered in shutdown mode with the Low-Power PIC. The
465 * RTC_INT1 is connected to the CC2538, so it is possible to receive interrupts
466 * from a pre-configured alarm, even waking up the CC2538 from PM3.
467 * A second interruption pin (RTC_INT2) is connected to the Low-Power PIC, after
468 * configuring the RTCC the Low-Power PIC can drive the board to shutdown mode,
469 * and enter into low-power mode (sleep), being the RTCC interrupt the waking up
470 * source to resume operation.
471 *
472 * @{
473 */
474#define PLATFORM_HAS_RTC 1
475#define RTC_SDA_PORT I2C_SDA_PORT
476#define RTC_SDA_PIN I2C_SDA_PIN
477#define RTC_SCL_PORT I2C_SCL_PORT
478#define RTC_SCL_PIN I2C_SCL_PIN
479#define RTC_INT1_PORT GPIO_D_NUM
480#define RTC_INT1_PIN 3
481#define RTC_INT1_VECTOR GPIO_D_IRQn
482/** @} */
483/*---------------------------------------------------------------------------*/
484/**
485 * \name On-board external WDT
486 * The RE-Mote features an on-board external WDT and battery monitor, which
487 * adds more robustness and prevents the mote to run wild if any unexpected
488 * problem shows-up.
489 * The external WDT requires a short pulse (<1ms) to be sent before a 2-second
490 * period. The battery monitor keeps the device in Reset if the voltage input
491 * is lower than 2.5V.
492 * The external WDT can be disabled by removing the R34 0Ohm resistor.
493 * As default the Texas Instrument's TPS3823 WDT is not mounted.
494 * Alternatively the testpoint or unused WDT's pad can be used to re-use as GPIO
495 * @{
496 */
497#define EXT_WDT_PORT GPIO_D_NUM
498#define EXT_WDT_PIN 5
499/** @} */
500/*---------------------------------------------------------------------------*/
501/**
502 * \name Device string used on startup
503 * @{
504 */
505#define BOARD_STRING "Zolertia RE-Mote revision B platform"
506/** @} */
507
508#endif /* BOARD_H_ */
509
510/**
511 * @}
512 * @}
513 */
Header file with register and macro declarations for the cc2538 GPIO module.
Header file for the ARM Nested Vectored Interrupt Controller.