Suli
O que é Suli
Parece o nome de uma garota? Na verdade, significa Seeed Unified Library Interface. É algo grande na nossa lista de tarefas para um futuro próximo.
Temos centenas de sensores, atuadores, displays e outros módulos úteis. No passado, nós nos concentrávamos principalmente em aplicações Arduino e fornecíamos apenas a Arduino Library. Isso significa que, se você usasse outra plataforma, como Raspberry, LauchPad ou MCS51, precisaria portar nossa Library e, às vezes, isso não é fácil.
Às vezes, quando alguns clientes nos pediam para fornecer algumas libraries para uma plataforma que não fosse Arduino, tudo o que podíamos fazer era dizer a eles “hey man, we only have Arduino library.” Responder aos clientes dessa maneira nos fazia sentir mal.
E temos pensado: e se houver uma maneira de fazer com que nossas libraries se encaixem em todas as plataformas. É realmente uma tarefa difícil, mas não impossível. E tivemos a sorte de finalmente descobrir: é Suli – Seeed Unified Library Interface, que pode fazer com que quase todas (pelo menos 90%) as nossas libraries sirvam para muitas plataformas comuns, ou pelo menos tornar fácil portá‑las.
Como o Suli funciona
Dê uma olhada na imagem a seguir,

Podemos ver que há quatro círculos e o mais interno é HW(hardware). Suli chamará recursos de HW, como GPIO, I2C, Timer e UART; depois Library compatível com Suli e, em seguida, User Application. Todas as nossas Libraries chamarão apenas a função Suli. Assim, para diferentes plataformas, podemos simplesmente portar o Suli, então a Library poderá ser usada. Isso significa que diferentes plataformas têm o seu Suli, Suli para Arudino, Suli para Mbed, Suli para….
Há vários pontos sobre o Suli:
-
Plataformas diferentes têm Suli diferentes, ele é para uma plataforma específica.
-
A Library compatível com Suli é independente de plataforma.
-
A Library compatível com Suli chamará a functon no Suli.
Suli tem dois arquivos, Suli.h e Suli.cpp(.c). E Suli deve implementar a seguinte função,
Tipo de GPIO:
typedef int IO_T; // IO type
typedef int PIN_T; // pin name
typedef int DIR_T; // pin direction
typedef int ANALOG_T; // pin analog
Estado de GPIO:
#define HAL_PIN_INPUT INPUT // INPUT and OUTPUT was declared in Arduino IDE
#define HAL_PIN_OUTPUT OUTPUT
#define HAL_PIN_HIGH HIGH // HIGH and LOW was declered in Arduino IDE
#define HAL_PIN_LOW LOW
Tipo de dado:
typedef signed char int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed long int32;
typedef unsigned long uint32;
Operação de IO digital:
void suli_pin_init(IO_T *pio, PIN_T pin); // pin initialize
void suli_pin_dir(IO_T *pio, DIR_T dir); // set pin direction
void suli_pin_write(IO_T *pio, int16 state); // write pin
int16 suli_pin_read(IO_T *pio); // read pin
uint16 suli_pulse_in(IO_T *pio, uint8 state, uint32 timeout);
Operação de IO analógico:
void suli_analog_init(ANALOG_T * aio, PIN_T pin);
int16 suli_analog_read(ANALOG_T * aio);
Delay:
void suli_delay_us(uint32 us); // delay us
void suli_delay_ms(uint32 ms); // delay ms
Times:
uint32 suli_millis(void);
uint32 suli_micros(void);
Interface I2C:
void suli_i2c_init(void * i2c_device);
uint8 suli_i2c_write(void * i2c_device, uint8 dev_addr, uint8 *data, uint8 len);
uint8 suli_i2c_read(void * i2c_device, uint8 dev_addr, uint8 *buff, uint8 *len);
UART:
void suli_uart_init(void * uart_device, int16 uart_num, uint32 baud);
void suli_uart_send(void * uart_device, int16 uart_num, uint8 *data, uint16 len);
void suli_uart_send_byte(void * uart_device, int16 uart_num, uint8 data);
uint8 suli_uart_read_byte(void * uart_device, int16 uart_num);
uint16 suli_uart_readable(void * uart_device, int16 uart_num);
Você pode notar que Suli inclui operação de IO digital, operação de IO analógico, I2C e função Uart, talvez não seja muito abrangente, mas com base na minha experiência, é suficiente para bastante das nossas libraries; claro, se descobrirmos que precisamos de mais funciton algum dia, vamos acrescentar.
O que vem a seguir
Nosso plano é tornar todas as libraries da Seeed compatíveis com Suli e portar o Suli para algumas plataformas comuns. Essas plataformas incluirão Arduino, Mbed, Mesh Bee, Raspberry, LaunchPad na primeira etapa. Espera‑se que esse trabalho seja concluído antes de junho. Fique ligado
Referência
Suporte Técnico & Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja o mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.