diff --git a/package/BLIOT/pika_hal_BLIOT_DAC.c b/package/BLIOT/pika_hal_BLIOT_DAC.c index 7b2d81eae..af07ae2e4 100644 --- a/package/BLIOT/pika_hal_BLIOT_DAC.c +++ b/package/BLIOT/pika_hal_BLIOT_DAC.c @@ -1,29 +1,90 @@ +#include #include "../PikaStdDevice/pika_hal.h" + int pika_hal_platform_DAC_open(pika_dev* dev, char* name) { + hosal_dac_dev_t* platform_dac = pikaMalloc(sizeof(hosal_dac_dev_t)); + memset(platform_dac, 0, sizeof(hosal_dac_dev_t)); + dev->platform_data = platform_dac; + /* Support P1/P2 ... */ + if (name[0] == 'P') { + int pin = fast_atoi(name + 1); + if (pin != 13 && pin != 14) { + /* bl602, only support P13, P14*/ + __platform_printf("DAC only support P13, P14\r\n"); + return -1; + } + platform_dac->config.pin = pin; + platform_dac->port = 0; +#if PIKA_DEBUG_ENABLE + __platform_printf("DAC: Open DAC on P%d\r\n", platform_dac->config.pin); +#endif + return 0; + } +#if PIKA_DEBUG_ENABLE + __platform_printf("Failed to open DAC: %s\r\n", name); +#endif return -1; } int pika_hal_platform_DAC_close(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_DAC_read(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_DAC_write(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_DAC_ioctl_enable(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_DAC_ioctl_disable(pika_dev* dev) { - return -1; + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; + if (NULL != platform_dac) { + pikaFree(platform_dac, sizeof(hosal_dac_dev_t)); + } + return 0; } int pika_hal_platform_DAC_ioctl_config(pika_dev* dev, pika_hal_DAC_config* cfg) { + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; + /* only support 8k,16k,32k */ + platform_dac->config.freq = cfg->speed; + platform_dac->config.dma_enable = 0; + cfg->max = 3300000; + cfg->vref = (pika_float)3.3; + return 0; +} + +int pika_hal_platform_DAC_read(pika_dev* dev, void* buf, size_t count) { + int ret = 0; + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; + ret = hosal_dac_get_value(platform_dac); +#if PIKA_DEBUG_ENABLE + __platform_printf("DAC: Read %d\r\n", ret); +#endif + if (ret < 0) { + return ret; + } + *(uint32_t*)buf = ret; + return 0; +} + +int pika_hal_platform_DAC_write(pika_dev* dev, void* buf, size_t count) { + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; +#if PIKA_DEBUG_ENALBE + __platform_printf("DAC: Write %d\r\n", *(uint32_t*)buf); +#endif + return hosal_dac_set_value(platform_dac, *(uint32_t*)buf); +} + +int pika_hal_platform_DAC_ioctl_enable(pika_dev* dev) { + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; + if (!dev->is_enabled) { + hosal_dac_init(platform_dac); +#if PIKA_DEBUG_ENABLE + __platform_printf("DAC: Enable DAC, freq: %d\r\n", + platform_dac->config.freq); +#endif + return 0; + } + return -1; +} + +int pika_hal_platform_DAC_ioctl_disable(pika_dev* dev) { + hosal_dac_dev_t* platform_dac = (hosal_dac_dev_t*)dev->platform_data; + if (dev->is_enabled) { + hosal_dac_finalize(platform_dac); + return 0; + } return -1; } diff --git a/package/BLIOT/pika_hal_BLIOT_SPI.c b/package/BLIOT/pika_hal_BLIOT_SPI.c index b1c9b6c36..cc021b7dc 100644 --- a/package/BLIOT/pika_hal_BLIOT_SPI.c +++ b/package/BLIOT/pika_hal_BLIOT_SPI.c @@ -1,30 +1,129 @@ +#include #include "../PikaStdDevice/pika_hal.h" +static int _num2pin(int num, uint8_t* mosi, uint8_t* miso, uint8_t* scli) { + /*********************** BL602 ************************** + * SPI0 -----> MOSI:P20, MISO:P0, SCLK:P22 + */ + switch (num) { + case 0: + *mosi = 20; + *miso = 0; + *scli = 22; + break; + default: + return -1; + } +#if PIKA_DEBUG_ENABLE + __platform_printf("SPI%d: mosi:%d, miso:%d, scli:%d\r\n", num, *mosi, *miso, + *scli); +#endif + return 0; +} + int pika_hal_platform_SPI_open(pika_dev* dev, char* name) { + hosal_spi_dev_t* platform_spi = pikaMalloc(sizeof(hosal_spi_dev_t)); + memset(platform_spi, 0, sizeof(hosal_spi_dev_t)); + dev->platform_data = platform_spi; + /* Support SPI0, SPI1, SPI2 */ + if (name[0] == 'S' && name[1] == 'P' && name[2] == 'I') { + int spi_num = fast_atoi(name + 3); + platform_spi->port = 0; + if (0 == _num2pin(spi_num, &platform_spi->config.pin_mosi, + &platform_spi->config.pin_miso, + &platform_spi->config.pin_clk)) { + return 0; + } else { + __platform_printf("SPI: Open SPI%d failed\r\n", spi_num); + return -1; + } + } return -1; } int pika_hal_platform_SPI_close(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_SPI_read(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_SPI_write(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_SPI_ioctl_enable(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_SPI_ioctl_disable(pika_dev* dev) { - return -1; + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; + if (NULL != platform_spi) { + pikaFree(platform_spi, sizeof(hosal_spi_dev_t)); + } + return 0; } int pika_hal_platform_SPI_ioctl_config(pika_dev* dev, pika_hal_SPI_config* cfg) { + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; + if (!dev->is_enabled) { + platform_spi->port = 0; + platform_spi->config.dma_enable = 0; + platform_spi->config.freq = cfg->speed; + platform_spi->p_arg = NULL; + switch (cfg->master_or_slave) { + case PIKA_HAL_SPI_MASTER: + platform_spi->config.mode = HOSAL_SPI_MODE_MASTER; + break; + case PIKA_HAL_SPI_SLAVE: + platform_spi->config.mode = HOSAL_SPI_MODE_SLAVE; + break; + default: + return -1; + } + switch (cfg->mode) { + case PIKA_HAL_SPI_MODE_0: + platform_spi->config.polar_phase = 0; + break; + case PIKA_HAL_SPI_MODE_1: + platform_spi->config.polar_phase = 1; + break; + case PIKA_HAL_SPI_MODE_2: + platform_spi->config.polar_phase = 2; + break; + case PIKA_HAL_SPI_MODE_3: + platform_spi->config.polar_phase = 3; + break; + default: + return -1; + } +#if PIKA_DEBUG_ENABLE + __platform_printf("SPI: freq:%d, mode:%d, polar_phase:%d\r\n", + platform_spi->config.freq, platform_spi->config.mode, + platform_spi->config.polar_phase); +#endif + } + return 0; +} + +int pika_hal_platform_SPI_ioctl_enable(pika_dev* dev) { + if (!dev->is_enabled) { + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; +#if PIKA_DEBUG_ENABLE + __platform_printf( + "SPI: Open SPI%d, freq:%d, mode:%d, polar_phase:%d\r\n", + platform_spi->port, platform_spi->config.freq, + platform_spi->config.mode, platform_spi->config.polar_phase); +#endif + hosal_spi_init(platform_spi); + return 0; + } return -1; } + +int pika_hal_platform_SPI_ioctl_disable(pika_dev* dev) { + if (dev->is_enabled) { + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; + hosal_spi_finalize(platform_spi); + return 0; + } + return -1; +} + +int pika_hal_platform_SPI_write(pika_dev* dev, void* buf, size_t count) { + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; + pika_hal_SPI_config* cfg = (pika_hal_SPI_config*)dev->ioctl_config; + return hosal_spi_send(platform_spi, buf, count, cfg->timeout); +} + +int pika_hal_platform_SPI_read(pika_dev* dev, void* buf, size_t count) { + hosal_spi_dev_t* platform_spi = (hosal_spi_dev_t*)dev->platform_data; + pika_hal_SPI_config* cfg = (pika_hal_SPI_config*)dev->ioctl_config; + return hosal_spi_recv(platform_spi, buf, count, cfg->timeout); +} diff --git a/package/BLIOT/pika_hal_BLIOT_UART.c b/package/BLIOT/pika_hal_BLIOT_UART.c deleted file mode 100644 index 464cafd66..000000000 --- a/package/BLIOT/pika_hal_BLIOT_UART.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "../PikaStdDevice/pika_hal.h" - -int pika_hal_platform_UART_open(pika_dev* dev, char* name) { - return -1; -} - -int pika_hal_platform_UART_close(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_UART_read(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_UART_write(pika_dev* dev, void* buf, size_t count) { - return -1; -} - -int pika_hal_platform_UART_ioctl_enable(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_UART_ioctl_disable(pika_dev* dev) { - return -1; -} - -int pika_hal_platform_UART_ioctl_config(pika_dev* dev, - pika_hal_UART_config* cfg) { - return -1; -} diff --git a/packages.toml b/packages.toml index 6705a0acf..2479cdcb4 100644 --- a/packages.toml +++ b/packages.toml @@ -441,4 +441,7 @@ releases = [ "v1.0.0 ca8fe36d68be16722317860394fdf78c620e3e2d" ] [[packages]] name = "BLIOT" -releases = [ "v0.1.0 4599ce8681d293a5cc7682115205ab5e85e9b5e8" ] +releases = [ + "v0.1.0 4599ce8681d293a5cc7682115205ab5e85e9b5e8", + "v0.2.0 eee8e1848eed77f3ebed777230104ebb4dfc3263" +]