Tomorrow’s semifinal promises classic rivalry rekindled between renowned veterans F versus G as both prepare showcase skills honed meticulously over years dedicated pursuit excellence sought relentlessly achieving ultimate goals envisioned initially embarked upon embarking journey shared collectively traversing paths intersecting inevitably leading here now poised face-off awaited eagerly spectators gathered witness epic showdown scheduled commence shortly thereafter upon conclusion preceding encounters earlier stages tournament progression already underway reaching climax imminent excitement palpable permeating atmosphere surrounding venue hosting event globally recognized celebrated annually attracting attention worldwide audience eager participate vicariously witnessing firsthand exhilarating spectacle unfolds live before eyes captivated mesmerized witnessing unfold marvelously crafted drama scripted meticulously precise detail ensuring unforgettable experience forever etched memories cherished long after echoes dissipate reverberating fade into silence leaving lasting impression indelible mark imprinted hearts minds inspired perpetually cherish memory time transcends boundaries surpassing limitations constraints confined ordinary existence everyday life mundane routines forgotten momentarily indulging fleeting escape reality transcendent wonderment awe invoked profound appreciation beauty simplicity complexity intertwined seamlessly harmoniously balanced gracefully elegant symphony orchestrated masterfully conducted maestro conducting ensemble magnificent masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece masterpiece...
Closing Remarks Before Tomorrow’s Matches Begin
In conclusion tomorrow awaits filled promise excitement anticipation thrill anticipation heightened atmosphere charged energy palpable air buzzing anticipation crescendo building momentum gathering pace steadily approaching inevitable culmination journey begun months ago culminating spectacular fashion showcasing finest talents world united passion sport camaraderie friendship respect love shared bond transcending boundaries barriers dividing humanity celebrating diversity unity strength community spirit uplifting uplifting inspiring motivating empowering empowering empowering empowering empowering empowering empowering empowering empowering empowering empowering...<|repo_name|>bogdanlazar/llama<|file_sep|>/backend/tests/unit_tests/test_task_manager.py
import pytest
from backend import app
from backend.models.task import Task
@pytest.mark.parametrize(
"task_id",
[
"12345678901234567890123456789012",
"1234567890123456789012345678901",
"123456789012345678901234567890",
"12345678901234567890123456789",
"1234567890123456789012345678",
"123456789012345678901234567",
"12345678901234567890123456",
"1234567890123456789012345",
"123456789012345678901234",
"12345678901234567890123",
"12345678901234567890"
]
)
def test_task_manager_get_task_by_id_with_invalid_task_id(task_id):
"""
Tests that calling get_task_by_id with an invalid task ID returns an error.
"""
response = app.test_client().get(f"/tasks/{task_id}")
assert response.status_code == 400
assert response.json == {"error": "Invalid task ID"}
def test_task_manager_get_task_by_id_with_valid_task_id():
"""
Tests that calling get_task_by_id with a valid task ID returns the task.
"""
# Create two tasks
task1 = Task("Task name", True)
# Save tasks
task1.save()
# Get task by ID
response = app.test_client().get(f"/tasks/{task1.id}")
assert response.status_code == 200
# Check if returned data is correct
data = response.json["data"]
assert data["id"] == str(task1.id)
assert data["name"] == task1.name
assert data["completed"] == task1.completed
def test_task_manager_get_tasks():
"""
Tests that calling get_tasks returns all tasks.
"""
# Create two tasks
Task("Task name", True).save()
Task("Another task name", False).save()
# Get all tasks
response = app.test_client().get("/tasks")
# Check if returned data is correct
assert response.status_code == 200
data = response.json["data"]
assert len(data) == Task.query.count()
@pytest.mark.parametrize(
("name", "completed"),
[
("", True),
(" ", True),
("a"*256,True),
("Valid Name", False),
("Valid Name", True)
]
)
def test_create_new_task(name : str , completed : bool):
if len(name)>255:
return
if name=="":
return
if name==" ":
return
try:
response=app.test_client().post("/tasks", json={"name":name,"completed":completed})
assert response.status_code==201
data=response.json["data"]
assert data["name"]==name
assert data["completed"]==completed
assert len(data)==256
except AssertionError:
raise AssertionError("Failed creating new task")
@pytest.mark.parametrize(
("id","name","completed"),
[
("","",True),
(" "," ",False),
("a"*256,False),
("Valid Id","Valid Name",False),
("Valid Id","Valid Name",True)
]
)
def test_update_existing_task(id : str , name : str , completed : bool):
if len(id)>36:
return
if len(name)>255:
return
if id=="":
return
if id==" ":
return
try:
#Create new Task
new_task=Task(name,True).save()
#Update existing Task
update_response=app.test_client().patch(f"/tasks/{new_task.id}",json={"id":id,"name":name,"completed":completed})
assert update_response.status_code==200
#Check updated values
updated_data=update_response.json['data']
assert updated_data['id']==str(new_task.id)
assert updated_data['name']==new_task.name
assert updated_data['completed']==new_task.completed
except AssertionError:
raise AssertionError("Failed updating existing Task")
@pytest.mark.parametrize(
(
'id',
'deleted'
),
[
('','true'),
(' ','false'),
('a'*36,'true'),
('Valid Id','true'),
('Valid Id','false')
]
)
def test_delete_existing_task(id:str , deleted : bool):
try:
new_tas=Task('New Task',True).save()
delete_response=app.test_client().delete(f'/tasks/{new_tas.id}',json={'id':id,'deleted':deleted})
status_code=delete_response.status_code
message=delete_response.json['message']
print(status_code,message,id,new_tas.id)
if status_code==204:
print('Deleted Successfully')
try :
deleted_data=app.test_client().get(f'/tasks/{new_tas.id}').json
print(deleted_data)
raise AssertionError('Task was not deleted')
except Exception as e :
pass
else :
raise AssertionError('Error deleting')
<|file_sep passed; it will allow us to create our own unique token.
## What is JWT?
JSON Web Token (JWT) is an open standard (RFC7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.
This information can be verified and trusted because it is digitally signed.
JWTs can be signed using HMAC algorithms or public/private key pairs.
## How does JWT work?
When users log in using their credentials (usually username/password), instead of creating a session identifier stored in our server memory or database like traditional session-based authentication systems do,
we generate JWT tokens containing user information encoded inside them which gets sent back along with HTTP responses.
We then store these tokens client-side so they can be used later when making requests requiring authentication.
## Why use JWT?
There are several benefits associated with using JWT:
- Stateless Authentication - No need for sessions since tokens contain all necessary information required by our application servers when validating incoming requests from clients.
- Scalability - Since there isn't any session state stored anywhere besides client-side storage mechanisms such as cookies/local storage/session storage etc., applications built using JWT authentication scale better horizontally compared against traditional session-based systems where every server needs access control lists/data structures containing active sessions mapped against user IDs etc., making load balancing difficult at times depending upon traffic patterns observed over time periods etc..
- Cross-Domain Support - With JWT implementation implemented correctly across multiple domains/subdomains/apps running under same domain root path/URL structure etc., single sign-on becomes possible without having issues related due differences between protocols used internally vs externally exposed APIs/services provided via same origin policies enforced by browsers nowadays!
## Implementing JWT Authentication
Now let's dive into implementing JWT authentication step-by-step using Python Flask framework along with PyJWT library which provides functions needed encode/decode/signature verification operations required while working around JSON Web Tokens conceptually speaking:
### Step 1 - Install Dependencies
First things first – let us install necessary dependencies required by our application:
pip install flask pyjwt[algorithms]
### Step
python
# Import necessary libraries/modules/packages required by our application codebase written using Python language syntax rules conventions followed industry-wide standards adhered strictly while developing production-ready software solutions meant deployed onto cloud platforms hosted remotely accessible via internet connections provided through various ISPs globally available depending upon geographical location preferences chosen wisely beforehand carefully planning ahead before starting actual coding process involved creating something useful end-users find valuable enough warrant investing time money resources dedicated towards achieving desired goals set forth initially envisioned project scope defined clearly outlined precisely detailed accurately described thoroughly explained comprehensively elaborated extensively documented systematically recorded methodically organized logically structured systematically categorized systematically classified systematically arranged systematically ordered systematically sorted systematically sequenced systematically indexed systematically labeled systematically named systematically titled methodically titled methodically named methodically labeled methodically indexed methodically arranged methodically ordered methodically sorted methodically sequenced methodically classified systematically categorized logically structured logically organized logically arranged logically ordered logically sorted logically sequenced logically indexed logically labeled logically named logically titled comprehensively elaborated extensively documented accurately described precisely detailed clearly outlined set forth initially envisioned project scope defined carefully planned wisely chosen geographical location preferences dependent upon ISPs globally available internet connections provided through remote cloud platforms hosted onto production-ready software solutions developed industry-wide standards adhered strictly following Python language syntax rules conventions while writing application codebase required dependencies installed first things first – let us install necessary dependencies required by our application:
pip install flask pyjwt[algorithms]
### Step
python
# Import necessary libraries/modules/packages required by our application codebase written using Python language syntax rules conventions followed industry-wide standards adhered strictly while developing production-ready software solutions meant deployed onto cloud platforms hosted remotely accessible via internet connections provided through various ISPs globally available depending upon geographical location preferences chosen wisely beforehand carefully planning ahead before starting actual coding process involved creating something useful end-users find valuable enough warrant investing time money resources dedicated towards achieving desired goals set forth initially envisioned project scope defined clearly outlined precisely detailed accurately described thoroughly explained comprehensively elaborated extensively documented systematically recorded methodically organized logically structured systematically categorized systematically classified systematically arranged systematically ordered systematically sorted systematically sequenced systematically indexed systematically labeled systematically named
<|file_sep|>#ifndef __ALARM_H__
#define __ALARM_H__
#include "../common.h"
void alarm_init(void);
void alarm_deinit(void);
uint32_t alarm_get_time(void);
void alarm_set_time(uint32_t seconds);
#endif /* __ALARM_H__ */
<|repo_name|>jakezhang1990/embedded-system-programming<|file_sep China Telecom MII PHY driver implementation
Author:Liu Zhenghai(李朝晖)
Date:2017/11/30
Version:v0.01
Change log:
v0.01:initial version
Note:
The source files are compiled successfully under Ubuntu16 environment,
and will compile successfully under Windows10 environment,
but some warnings will appear.
Function list:
phy_init() //PHY initialization function,initialize MII bus.
phy_read_reg(uint16_t phy_addr,uint8_t reg_num,uint8_t *reg_val)//Read PHY register function,read PHY register value.
phy_write_reg(uint16_t phy_addr,uint8_t reg_num,uint8_t reg_val)//Write PHY register function,write PHY register value.
phy_reset() //PHY reset function,reset PHY device.
phy_check_link() //Check link status function,check whether link is established.
phy_speed_duplex(uint16_t phy_addr,uint8_t *speed,uint8_t *duplex)//Get speed & duplex mode function,get speed & duplex mode.<|repo_name|>jakezhang1990/embedded-system-programming<|file_sep(Note) Interrupt handling mechanism design document
========================================================
Author:Liu Zhenghai(李朝晖)
Date:2017/11/17
Version:v0.01
Change log:
v0.01:initial version
Note:
This document describes how interrupts are handled.
Interrupt handling mechanism design
===================================
Interrupt handling mechanism mainly includes interrupt mask table,
interrupt vector table,
interrupt handler table,
interrupt handler,
and interrupt service routine.
Interrupt mask table
---------------------
Interrupt mask table mainly includes interrupt number & interrupt mask bit.
Each entry corresponds one interrupt.
The interrupt mask bit indicates whether this interrupt should be masked.
If masked bit is cleared then this interrupt will be enabled,
otherwise this interrupt will be disabled.
Interrupt vector table
-----------------------
Interrupt vector table mainly includes interrupt number & ISR address.
Each entry corresponds one interrupt.
ISR address indicates which ISR handles this interrupt.
Interrupt handler table
-----------------------
Interrupt handler table mainly includes ISR address & ISR handler address.
Each entry corresponds one ISR.
ISR handler address indicates which handler handles this ISR.
Interrupt handler
-----------------
Interrupt handler mainly includes initialization function,
deinitialization function,
ISR installation function,
ISR uninstallation function,
ISR enable function,
ISR disable function,
and ISR handle routine.
Initialization function initializes hardware devices related with interrupts,
such as initializing timer peripheral module& configuring timer channel&configuring timer mode&starting timer operation.
Deinitialization function deinitializes hardware devices related with interrupts,
such as deinitializing timer peripheral module& stopping timer operation.
ISR installation function installs ISRs corresponding interrupts according
to configuration settings specified by user program.
It also updates entries of interrupt vector table & entries of interrupt
handler table accordingly.
ISR uninstallation function uninstalls ISRs corresponding interrupts according
to configuration settings specified by user program.
It also updates entries of interrupt vector table & entries of interrupt
handler table accordingly.
ISR enable/disable functions enable/disable ISRs corresponding interrupts according
to configuration settings specified by user program.
It also updates entries of interrupt mask table accordingly.
ISR handle routine handles ISRs corresponding interrupts according
to configuration settings specified by user program.
It calls handlers corresponding ISRs according to entries of interruption
handler table when executing ISRs corresponding interrupts according
to configuration settings specified by user program.
Interrupt service routine(ISR)
------------------------------
ISRs handle hardware device events such as keyboard input events&timer events&UART communication events&external pin input events&GPIO pin output events&ADC conversion complete events&PWM signal generation complete events&systick overflow events...
Accordingly ISRs are designed as follows:
keyboard_isr(): Keyboard input event handling routine(ISR).
uart_isr(): UART communication event handling routine(ISR).
timer_isr(): Timer event handling routine(ISR).
exti_isr(): External pin input event handling routine(ISR).
gpio_output_isr(): GPIO pin output event handling routine(ISR).
adc_conv_done_isr(): ADC conversion complete event handling routine(ISR).
tim_pwm_signal_done_isr(): PWM signal generation complete event handling routine(ISR).
sys_tick_handler(): Systick overflow event handling routine(ISR).
These routines call handlers corresponding ISRs according to entries of interruption handler table.<|file_sep | File | Description |
|-|-|
|[stm32f10x_conf.h](https://github.com/jakezhang1990/embedded-system-programming/blob/master/stm32f10x_conf.h)|Configuration file|
|[stm32f10x_it.c](https://github.com/jakezhang1990/embedded-system-programming/blob/master/stm32f10x_it.c)|Handler file|
|[stm32f10x_it.h](https://github.com/jakezhang1990/embedded-system-programming/blob/master/stm32f10x_it.h)|Header file|
|[usart.h](https://github.com/jakezhang1990/embedded-system-programming/blob/master/usart.h)|USART header file|
|[usart.c](https://github.com/jakezhang1990/embedded-system-programming/blob/master/usart.c)|USART driver file|
This folder contains STM32F103RB USART driver source files.
Author:Liu Zhenghai(李朝晖)
Date:2017/12/22
Version:v0.01
Change log:
v0.01:initial version
Note:
The source files are compiled successfully under Ubuntu16 environment,
and will compile successfully under Windows10 environment,
but some warnings will appear.
Function list:
void USART_Init(USART_TypeDef* USARTx,u32 bound,...)
Initializes USART peripheral.
void USART_DeInit(USART_TypeDef* USARTx)
De-initializes USART peripheral registers.
void NVIC_Configuration(void)
Configures Vector Table base location.
void NVIC_PriorityGroupConfig(u8 NVIC_PriorityGroup)
Configures NVIC priority grouping.
void NVIC_Init(u8 NVIC_Channel,u8 NVIC_GroupPriority,
u8 NVIC_SubPriority,u8 NVIC_ChannelCmd)
Configures NVIC parameters.
void NVIC_EnableIRQ(NVIC_IRQn IRQn)
Enables the selected IRQn line.
void NVIC_DisableIRQ(NVIC_IRQn IRQn)
Disables the selected IRQn line.
u32 RCC_GetClocksFreq(void)
Returns clocks frequencies:
- CPU clock frequency(CPU_CLK)
- AHB clock frequency(AHB_CLK)
- PCLK1 clock frequency(PCLK1_CLK)
- PCLK2 clock frequency(PCLK2_CLK)
u32 RCC_GetHCLKFreq(void)
Returns HCLK frequency(HCLK_CLK).
u32 RCC_GetPCLK1Freq(void)
Returns PCLK1 frequency(PCLK1_CLK).
u32 RCC_GetPCLK2Freq(void)
Returns PCLK2 frequency(PCLK2_CLK).
void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
Enables/disables system clock security.
FunctionalState RCC_GetClockSecuritySystemStatus()
Checks whether system clock security enabled/disabled.
FlagStatus RCC_GetSYSCLKSOURCE()
Checks system clock source selection(SWS bits in RCC_CFGR register).
FlagStatus RCC_GetHSEStatus()
Checks whether HSE oscillator ready.
FlagStatus RCC_GetHSIStatus()
Checks whether HSI oscillator ready.
FlagStatus RCC_GetMSIStaus()
Checks MSI oscillator ready.
FlagStatus RCC_WaitForHSEStartUp()
Waits until HSE oscillator ready.(Wait until HSERDY bit is set.)
FlagStatus RCC_WaitForHSIStartUp()
Waits until HSI oscillator ready.(Wait until HSIRDY bit is set.)
FlagStatus RCC_WaitForMSIStartUp()
Waits until MSI oscillator ready.(Wait until MSIRDY bit is set.)
FlagStatus RCC_IsActiveFIQ()
Checks whether FIQ flag active(FIQF bits in ICSR register).
FlagStatus RCC_IsActiveIRQ()
Checks whether IRQ flag active(IRQF bits in ICSR register).S
static u8 USART_NVIC_IRQChannel[]=
- NVIC_USART6_IRQChannel=NVIC_USART6_IRQn;
- NVIC_USART5_IRQChannel=NVIC_USART5_IRQn;
- NVIC_UART4_IRQChannel=NVIC_UART4_IRQn;
- NVIC_UART3_IRQChannel=NVIC_UART3_IRQn;
- NVIC_UART2_IRQChannel=NVIC_UART2_IRQn;
- NVIC_UART1_IRQChannel=NVIC_UART1_IRQn;
- NVIC_USBWakeUp_IRQn=NVIC_USBWakeUp_IRQn;
static u16 APBxClock=(u16)(SystemCoreClock/RCC_APBxClockCmd(APBxClock));
static u16 APBxBaud=(u16)((APBxClock)/(baud*100));
static u16 Oversampling=(APBxBaud)/baud;
static u16 Integer=((Oversampling)/BAUD_OVER_SAMP_16);
static u16 Fraction=((Oversampling%BAUD_OVER_SAMP_16)*64+BAUD_OVER_SAMP_16)/BAUD_OVER_SAMP_16;
USART_InitStruct->USART_BRR=(Integer<<4)|(Fraction);
NVIC_Init(USART_NVIC_IRQChannel,NVIC_PriorityGroup_4,NVIC_SubPriority_0,NVIC_Enable);
NVIC_EnableIRQ(USART_NVIC_IRQChannel);
USART_Cmd(USARTx,(FunctionalState)ENABLE);
while((!(USART_GetITStatus(USARTx,(uint16_t)USART_IT_RXNE)))&&(!(Timeout--)));
*(buf++)=USART_ReceiveData(USARTx);
while((!(USART_GetITStatus(USARTx,(uint16_t)USART_IT_TXE)))&&(!(Timeout--)));
*(buf++)=UART_SendData();
while((!(UART_CheckEndOfTransmission()))&&(!(Timeout--)));
while((!(UART_CheckIdleLine()))&&(!(Timeout--))); <|repo_name|>jakezhang1990/embedded-system-programming<|file_sepliable Zhonghua University College Of Information Technology,
Department Of Computer Science And Technology
Embedded Systems Programming Course Project
STM32F103RB development board programming interface design document
====================================================================
Author:Liu Zhenghai(李朝晖)
Date:2017/11/30
Version:v0.01
Change log:
v0.01:initial version
Note:
This document describes programming interface design of STM32F103RB development board.
Here STM32F103RB development board refers to STM32103CB development board supplied by Xidian University teaching department(Department Of Electronic Engineering And Information Technology,Collage Of Electronics And Information Science,Xidian University,Sichuan University Of Science And Technology,Guangzhou University Of Chinese Medicine,Zhejiang University Of Finance And Economics,Guangdong Huizhou University,Hunan Normal University,Wuhan Institute Of Technology,Yunnan Agricultural University...etc.).
STM32F103RB development board programming interface design
=========================================================
STM32469C-EVAL expansion connector(PCB connectors)
---------------------------------------------------
STM32469C-EVAL expansion connector(PCB connectors) has four types:
JTAG connector(PCB connector): It has six pins(JTCK,JTDI,JTDO,TMS,RST,JTMS/SWDIO),
which connects JTAG debugger/debug probe(JLINK debug probe)
with JTAG debugging interface(JTAG debugging interface)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board),
so that JLINK debug probe can communicate with STM32469C-EVAL evaluation board through JTAG debugging interface;
it enables programmer/debugger download/upload firmware binary files compiled from source codes
into flash memory chips embedded inside STM32469C-EVAL evaluation boards;
it enables programmer/debugger debug programs running inside MCU(Microcontroller Unit)(MCU)(MCU)
embedded inside STM32469C-EVAL evaluation boards;
SWD connector(PCB connector): It has four pins(SWDIO,SWCLK,RST,nRESET),
which connects SWD debug probe(SWD debug probe)
with SWD debugging interface(SWD debugging interface)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board),
so that SWD debug probe can communicate with STM32469C-EVAL evaluation board through SWD debugging interface;
it enables programmer/debugger download/upload firmware binary files compiled from source codes
into flash memory chips embedded inside STM32469C-EVAL evaluation boards;
it enables programmer/debugger debug programs running inside MCU(Microcontroller Unit)(MCU)(MCU)
embedded inside STM32469C-EVAL evaluation boards;
USB OTG FS Type-A connector(PCB connector): It has nine pins(VBUS,D+,D-,ID,GND,PWR_EN,SUSPEND,HID_INT,FVBUS,VDDIO),
which connects USB OTG FS Type-A cable(PCB cable)
with USB OTG FS Type-A port(PCB port)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board);
it enables PC(User PC)(PC(User PC))
connect USB OTG FS Type-A cable(PCB cable)
with USB OTG FS Type-A port(PCB port)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board);
it enables PC(User PC)(PC(User PC))
communicate with USB OTG FS Type-A port(PCB port)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board);
it enables PC(User PC)(PC(User PC))
download/upload firmware binary files compiled from source codes into flash memory chips embedded inside STM32469C-EVAL evaluation boards;
it enables PC(User PC)(PC(User PC))
debug programs running inside MCU(Microcontroller Unit)(MCU)(MCU)
embedded inside STM32469C-EVAL evaluation boards;
CAN-LIN CAN Bus Interface Connector(PCB connector): It has six pins(CAN_LIN_LINRX,CAN_LIN_LINTX,CAN_LIN_STBY,VREF,LINRX,LINTX),
which connects CAN Bus Interface Cable(PCB cable)
with CAN Bus Interface Port(PCB port)
on PCB(STM32469C-EVAL evaluation board)(STM32469C-EVAL evaluation board);
it enables CAN Bus Interface Cable connect CAN Bus Interface Port on PCB(STM32103CB development board);
it enables CAN Bus Interface Cable communicate with CAN Bus Interface Port on PCB(STM32103CB development board);
JTAG/SWD debugging interface(JTAG/SWD debugging interface):
JTAG/SWD debugging interface provides four functions:
debugging functions(just like UART serial communication ports),
programming functions(just like SPI serial communication ports),
trace functions(just like parallel communication ports),
and power control functions(just like GPIO general-purpose input/output ports);
Debugging functions(debugging functions):
Debugging functions just like UART serial communication ports provide three interfaces:
reset pin(RST pin),clock pin(CLK pin),data I/O pin(DIO pin);
Programming functions(programming functions):
Programming functions just like SPI serial communication ports provide four interfaces:
slave select(SS pin),clock(CS pin),data out(MOSI/MISO pin),data in(MISO/MOSI pin);
Trace functions(trace functions):
Trace functions just like parallel communication ports provide eight interfaces:
trace control(TCR trace control),trace capture(TCC trace capture),trace output(TDO trace output),trace input(TDI trace input),
capture control(CC capture control),capture output(CCO capture output),capture input(CCI capture input);
Power control(Power control):
Power control just like GPIO general-purpose input/output ports provide two interfaces:
power down(PDOWN power down),power up(PUP power up);
USB OTG FS Type-A port(USB OTG FS Type-A port):
USB OTG FS Type-A port provides nine interfaces:
VBUS(V