From b8de35658ffd78ad8b22f91ccbbd3d63663afda9 Mon Sep 17 00:00:00 2001 From: Alexsander Akers Date: Tue, 25 Jan 2022 15:03:22 -0500 Subject: Sensor Watch Simulator (#35) * Put something on screen * Use the 32bit watch_date_time repr to pass from JS * Implement periodic callbacks * Clear display on enabling * Hook up watch_set_led_color() to SVG (green-only) * Make debug output full-width * Remove default Emscripten canvas * Implement sleep and button clicks * Fix time zone conversion bug in beats-time app * Clean up warnings * Fix pin levels * Set time zone to browser value (if available) * Add basic backup data saving * Silence format specifier warnings in both targets * Remove unnecessary, copied files * Use RTC pointer to clear callbacks (if available) * Use preprocessor define to avoid hardcoding MOVEMENT_NUM_FACES * Change each face to const preprocessor definition * Remove Intl.DateTimeFormat usage * Update shell.html title, header * Add touch start/end event handlers on SVG buttons * Update shell.html * Update folder structure (shared, simulator, hardware under watch-library) * Tease out shared components from watch_slcd * Clean up simulator watch_slcd.c inline JS calls * Fix missing newlines at end of file * Add simulator warnings (except format, unused-paremter) * Implement remaining watch_rtc functions * Fix button bug on mouse down then drag out * Implement remaining watch_slcd functions * Link keyboard events to buttons (for keys A, L, M) * Rewrite event handling (mouse, touch, keyboard) in C * Set explicit text UTF-8 charset in shell.html * Address PR comments * Remove unused directories from include paths --- .../hardware/hal/documentation/ext_irq.rst | 39 ++++++++++ watch-library/hardware/hal/documentation/flash.rst | 52 +++++++++++++ .../hardware/hal/documentation/i2c_master_sync.rst | 87 ++++++++++++++++++++++ .../hardware/hal/documentation/rand_sync.rst | 43 +++++++++++ .../hardware/hal/documentation/slcd_sync.rst | 82 ++++++++++++++++++++ .../hardware/hal/documentation/spi_master_sync.rst | 51 +++++++++++++ .../hardware/hal/documentation/usart_sync.rst | 58 +++++++++++++++ 7 files changed, 412 insertions(+) create mode 100644 watch-library/hardware/hal/documentation/ext_irq.rst create mode 100755 watch-library/hardware/hal/documentation/flash.rst create mode 100644 watch-library/hardware/hal/documentation/i2c_master_sync.rst create mode 100755 watch-library/hardware/hal/documentation/rand_sync.rst create mode 100644 watch-library/hardware/hal/documentation/slcd_sync.rst create mode 100755 watch-library/hardware/hal/documentation/spi_master_sync.rst create mode 100755 watch-library/hardware/hal/documentation/usart_sync.rst (limited to 'watch-library/hardware/hal/documentation') diff --git a/watch-library/hardware/hal/documentation/ext_irq.rst b/watch-library/hardware/hal/documentation/ext_irq.rst new file mode 100644 index 00000000..7dcdc7c5 --- /dev/null +++ b/watch-library/hardware/hal/documentation/ext_irq.rst @@ -0,0 +1,39 @@ +============== +EXT IRQ driver +============== + +The External Interrupt driver allows external pins to be +configured as interrupt lines. Each interrupt line can be +individually masked and can generate an interrupt on rising, +falling or both edges, or on high or low levels. Some of +external pin can also be configured to wake up the device +from sleep modes where all clocks have been disabled. +External pins can also generate an event. + +Features +-------- +* Initialization and de-initialization +* Enabling and disabling +* Detect external pins interrupt + +Applications +------------ +* Generate an interrupt on rising, falling or both edges, + or on high or low levels. + +Dependencies +------------ +* GPIO hardware + +Concurrency +----------- +N/A + +Limitations +----------- +N/A + +Knows issues and workarounds +---------------------------- +N/A + diff --git a/watch-library/hardware/hal/documentation/flash.rst b/watch-library/hardware/hal/documentation/flash.rst new file mode 100755 index 00000000..fcc86e63 --- /dev/null +++ b/watch-library/hardware/hal/documentation/flash.rst @@ -0,0 +1,52 @@ +The Flash Driver +================ + +Flash is a re-programmable memory that retains program and data +storage even with power off. + +User can write or read several bytes from any valid address in a flash. + +As to the erase/lock/unlock command, the input parameter of address should +be a bytes address aligned with the page start, otherwise, the command will fail +to be executed. At the meantime, the number of pages that can be locked or unlocked +at once depends on region size of the flash. User can get the real number +from the function return value which could be different for the different devices. + +Features +-------- + +* Initialization/de-initialization +* Writing/Reading bytes +* Locking/Unlocking/Erasing pages +* Notifications about errors or being ready for a new command + +Applications +------------ + +* Mini disk which can retain program and data storage +* Boot loader +* Non volatile storage + +Dependencies +------------ + +The peripheral which controls a re-programmable flash memory. + +Concurrency +----------- + +N/A + +Limitations +----------- + +User should pay attention to set a proper stack size in their application, +since the driver manages a temporary buffer in stack to cache unchanged data +when calling flash write and erase function. +Due to flash memory architecture of SAMD21/D20/L21/L22/C20/C21/D09/D10/D11/R21, +write operation erazes row content before each write. + +Known issues and workarounds +---------------------------- + +N/A diff --git a/watch-library/hardware/hal/documentation/i2c_master_sync.rst b/watch-library/hardware/hal/documentation/i2c_master_sync.rst new file mode 100644 index 00000000..77b4f6e9 --- /dev/null +++ b/watch-library/hardware/hal/documentation/i2c_master_sync.rst @@ -0,0 +1,87 @@ +============================= +I2C Master synchronous driver +============================= + +I2C (Inter-Integrated Circuit) is a two wire serial interface usually used +for on-board low-speed bi-directional communication between controllers and +peripherals. The master device is responsible for initiating and controlling +all transfers on the I2C bus. Only one master device can be active on the I2C +bus at the time, but the master role can be transferred between devices on the +same I2C bus. I2C uses only two bidirectional open-drain lines, usually +designated SDA (Serial Data Line) and SCL (Serial Clock Line), with pull up +resistors. + +The stop condition is automatically controlled by the driver if the I/O write and +read functions are used, but can be manually controlled by using the +i2c_m_sync_transfer function. + +Often a master accesses different information in the slave by accessing +different registers in the slave. This is done by first sending a message to +the target slave containing the register address, followed by a repeated start +condition (no stop condition between) ending with transferring register data. +This scheme is supported by the i2c_m_sync_cmd_write and i2c_m_sync_cmd_read +function, but limited to 8-bit register addresses. + +I2C Modes (standard mode/fastmode+/highspeed mode) can only be selected in +Atmel Start. If the SCL frequency (baudrate) has changed run-time, make sure to +stick within the SCL clock frequency range supported by the selected mode. +The requested SCL clock frequency is not validated by the +i2c_m_sync_set_baudrate function against the selected I2C mode. + +Features +-------- + + * I2C Master support + * Initialization and de-initialization + * Enabling and disabling + * Run-time bus speed configuration + * Write and read I2C messages + * Slave register access functions (limited to 8-bit address) + * Manual or automatic stop condition generation + * 10- and 7- bit addressing + * I2C Modes supported + +----------------------+-------------------+ + |* Standard/Fast mode | (SCL: 1 - 400kHz) | + +----------------------+-------------------+ + |* Fastmode+ | (SCL: 1 - 1000kHz)| + +----------------------+-------------------+ + |* Highspeed mode | (SCL: 1 - 3400kHz)| + +----------------------+-------------------+ + +Applications +------------ + +* Transfer data to and from one or multiple I2C slaves like I2C connected sensors, data storage or other I2C capable peripherals +* Data communication between micro controllers +* Controlling displays + +Dependencies +------------ + +* I2C Master capable hardware + +Concurrency +----------- + +N/A + +Limitations +----------- + +General +^^^^^^^ + + * System Managmenet Bus (SMBus) not supported. + * Power Management Bus (PMBus) not supported. + +Clock considerations +^^^^^^^^^^^^^^^^^^^^ + +The register value for the requested I2C speed is calculated and placed in the correct register, but not validated if it works correctly with the clock/prescaler settings used for the module. To validate the I2C speed setting use the formula found in the configuration file for the module. Selectable speed is automatically limited within the speed range defined by the I2C mode selected. + +Known issues and workarounds +---------------------------- + +N/A + + diff --git a/watch-library/hardware/hal/documentation/rand_sync.rst b/watch-library/hardware/hal/documentation/rand_sync.rst new file mode 100755 index 00000000..19ec1d36 --- /dev/null +++ b/watch-library/hardware/hal/documentation/rand_sync.rst @@ -0,0 +1,43 @@ +========================================== +Random Number Generator Synchronous driver +========================================== + +Random Number Generator (RAND) generates a sequence of numbers that can not +be reasonably predicted better than by a random chance. + +In some implementation cases, seed is required for the Random Number Generator +to generate random numbers. rand_sync_set_seed is used to update the seed. +If it's actually not required by the generator implementation, the function just +returns ERR_UNSUPPORTED_OP. + +Features +-------- + +* Initialization and de-initialization +* Enabling and Disabling +* Setting seed +* 8-bit and 32-bit random data/data array generation + +Applications +------------ + +* Generate random keys for data encryption + +Dependencies +------------ + +* Random number generation hardware/software + +Concurrency +----------- +N/A + +Limitations +----------- + +N/A + +Known issues and workarounds +---------------------------- +N/A + diff --git a/watch-library/hardware/hal/documentation/slcd_sync.rst b/watch-library/hardware/hal/documentation/slcd_sync.rst new file mode 100644 index 00000000..e18aa9dd --- /dev/null +++ b/watch-library/hardware/hal/documentation/slcd_sync.rst @@ -0,0 +1,82 @@ + +SLCD Synchronous driver +======================= + +An LCD display is made of several segments (pixels or complete symbols) which +can be block light or let light through. In each segment is one electrode +connected to the common terminal (COM pin) and one is connected to the segment +terminal (SEG pin). When a voltage above a certain threshold level is applied +across the liquid crystal, it will change orientation and either let light +through or block it. + +The driver supports segment on/off/blink, animation and character display. + +Each segment has a unique int32 segment id which is used by the driver. The id is +combined by common number(COM) and segment number(SEG), the COM and SEG start from 0. +The unique segment id is calculated by this formula: (COM << 16) | SEG +For example a 8(coms)*8(segments)SLCD, the unique segment id for segment should be + + +-----+-----+---------+ + | COM | SEG | ID | + +-----+-----+---------+ + | 0 | 0 | 0x00000 | + +-----+-----+---------+ + | 1 | 0 | 0x10000 | + +-----+-----+---------+ + | 7 | 7 | 0x70007 | + +-----+-----+---------+ + +Segment ID can be calculated using the pre-defined macro SLCD_SEGID(com, seg). + +For character display, the "segment character mapping table" and "character mapping table" +should be setup in configuration. The driver have no API to setup/change those +mapping setting. +There are two pre-defined "segment character mapping table" in this driver, 7 segments +and 14 segments. The 7 segment character mapping can display 0-9 and a-f, the 14 +segments character mapping can display 0-9, A-Z and some special ASCII, for more +details please refer to hpl_slcd_cm_7_seg_mapping.h and hpl_slcd_cm_14_seg_mapping.h. +Application can also adjust this mapping table in the configuration header file, +to add more character mapping or remove some unused character. + +The "character mapping" is used to setup each character in SLCD display screen. +The driver supports multiple character mapping, the max number varies on different +MCU/MPU. For example if an LCD display screen has five "7-segments character" and +eight "14-segments character", and the MCU support max 44 characters setting, then +the 13 character should be setup in configuration. Application can select any +position from those 44 characters setting to save those 13 character. +The index of character setting will be used in the driver API. For example: +five "7-segments character" setting to 0 to 4 and eight "14-segments character" setting +to 10 to 17. Then the application can use index from 0 to 4 to display the +"7-segments character" and use index from 10 to 14 to display "14-segments character". + +Features +-------- + +* Initialization and de-initialization +* Enabling and Disabling +* Switching segment on/off +* Set segment blink +* Autonomous animation +* Character display + +Applications +------------ +* SLCD display control, segment on/off/blink +* Play battery animation, running wheel, wifi signal, etc. +* Display Time Clock by 7 segments character mapping +* Display ASCII character by 14 segments character mapping + +Dependencies +------------ +* SLCD capable hardware + +Concurrency +----------- +N/A + +Limitations +----------- + +Known issues and workarounds +---------------------------- +N/A diff --git a/watch-library/hardware/hal/documentation/spi_master_sync.rst b/watch-library/hardware/hal/documentation/spi_master_sync.rst new file mode 100755 index 00000000..4fbe45e2 --- /dev/null +++ b/watch-library/hardware/hal/documentation/spi_master_sync.rst @@ -0,0 +1,51 @@ +The SPI Master Synchronous Driver +================================= + +The serial peripheral interface (SPI) is a synchronous serial communication +interface. + +SPI devices communicate in full duplex mode using a master-slave +architecture with a single master. The master device originates the frame for +reading and writing. Multiple slave devices are supported through selection +with individual slave select (SS) lines. + +Features +-------- + +* Initialization/de-initialization +* Enabling/disabling +* Control of the following settings: + + * Baudrate + * SPI mode + * Character size + * Data order +* Data transfer: transmission, reception and full-duplex + +Applications +------------ + +Send/receive/exchange data with a SPI slave device. E.g., serial flash, SD card, +LCD controller, etc. + +Dependencies +------------ + +SPI master capable hardware + +Concurrency +----------- + +N/A + +Limitations +----------- + +The slave select (SS) is not automatically inserted during read/write/transfer, +user must use I/O to control the devices' SS. + +Known issues and workarounds +---------------------------- + +N/A + diff --git a/watch-library/hardware/hal/documentation/usart_sync.rst b/watch-library/hardware/hal/documentation/usart_sync.rst new file mode 100755 index 00000000..15e4b138 --- /dev/null +++ b/watch-library/hardware/hal/documentation/usart_sync.rst @@ -0,0 +1,58 @@ +The USART Synchronous Driver +============================ + +The universal synchronous and asynchronous receiver and transmitter +(USART) is usually used to transfer data from one device to the other. + +User can set action for flow control pins by function usart_set_flow_control, +if the flow control is enabled. All the available states are defined in union +usart_flow_control_state. + +Note that user can set state of flow control pins only if automatic support of +the flow control is not supported by the hardware. + +Features +-------- + +* Initialization/de-initialization +* Enabling/disabling +* Control of the following settings: + + * Baudrate + * UART or USRT communication mode + * Character size + * Data order + * Flow control +* Data transfer: transmission, reception + +Applications +------------ + +They are commonly used in a terminal application or low-speed communication +between devices. + +Dependencies +------------ + +USART capable hardware. + +Concurrency +----------- + +Write buffer should not be changed while data is being sent. + + +Limitations +----------- + +* The driver does not support 9-bit character size. +* The "USART with ISO7816" mode can be only used in ISO7816 capable devices. + And the SCK pin can't be set directly. Application can use a GCLK output PIN + to generate SCK. For example to communicate with a SMARTCARD with ISO7816 + (F = 372 ; D = 1), and baudrate=9600, the SCK pin output frequency should be + config as 372*9600=3571200Hz. More information can be refer to ISO7816 Specification. + +Known issues and workarounds +---------------------------- + +N/A -- cgit v1.2.3