static void chip_init(st7735_t *screen) { gpio_set_pin_mode(screen->params.rst, GPIO_PM_OUTPUT); gpio_set_pin_mode(screen->params.cs, GPIO_PM_OUTPUT); gpio_set_pin_mode(screen->params.cd, GPIO_PM_OUTPUT); gpio_set_pin_mode(screen->params.backlight, GPIO_PM_OUTPUT); /* Reset */ gpio_digital_pulse(screen->params.rst, 0, 10); gpio_digital_write(screen->params.cd, 0); gpio_digital_write(screen->params.cs, 1); gpio_digital_write(screen->params.backlight, 1); /* Init SPI */ spi_init(screen->params.spi_port); spi_set_max_speed(screen->params.spi_port, 4000000); /* Send init sequence */ st7735_init_seq(screen); }
static int lua_spi_newindex(lua_State *L) { spi_t *spi; const char *field; spi = luaL_checkudata(L, 1, "periphery.SPI"); if (!lua_isstring(L, 2)) return lua_spi_error(L, SPI_ERROR_ARG, 0, "Error: unknown property"); field = lua_tostring(L, 2); if (strcmp(field, "fd") == 0) return lua_spi_error(L, SPI_ERROR_ARG, 0, "Error: immutable property"); else if (strcmp(field, "mode") == 0) { unsigned int mode; int ret; lua_spi_checktype(L, 3, LUA_TNUMBER); mode = lua_tounsigned(L, 3); if ((ret = spi_set_mode(spi, mode)) < 0) return lua_spi_error(L, ret, spi_errno(spi), "Error: %s", spi_errmsg(spi)); return 0; } else if (strcmp(field, "max_speed") == 0) { uint32_t max_speed; int ret; lua_spi_checktype(L, 3, LUA_TNUMBER); max_speed = lua_tounsigned(L, 3); if ((ret = spi_set_max_speed(spi, max_speed)) < 0) return lua_spi_error(L, ret, spi_errno(spi), "Error: %s", spi_errmsg(spi)); return 0; } else if (strcmp(field, "bit_order") == 0) { const char *s; spi_bit_order_t bit_order; int ret; lua_spi_checktype(L, 3, LUA_TSTRING); s = lua_tostring(L, 3); if (strcmp(s, "msb") == 0) bit_order = MSB_FIRST; else if (strcmp(s, "lsb") == 0) bit_order = LSB_FIRST; else return lua_spi_error(L, SPI_ERROR_ARG, 0, "Error: invalid bit_order, should be 'msb' or 'lsb'"); if ((ret = spi_set_bit_order(spi, bit_order)) < 0) return lua_spi_error(L, ret, spi_errno(spi), "Error: %s", spi_errmsg(spi)); return 0; } else if (strcmp(field, "bits_per_word") == 0) { uint8_t bits_per_word; int ret; lua_spi_checktype(L, 3, LUA_TNUMBER); bits_per_word = lua_tounsigned(L, 3); if ((ret = spi_set_bits_per_word(spi, bits_per_word)) < 0) return lua_spi_error(L, ret, spi_errno(spi), "Error: %s", spi_errmsg(spi)); return 0; } else if (strcmp(field, "extra_flags") == 0) { uint8_t extra_flags; int ret; lua_spi_checktype(L, 3, LUA_TNUMBER); extra_flags = lua_tounsigned(L, 3); if ((ret = spi_set_extra_flags(spi, extra_flags)) < 0) return lua_spi_error(L, ret, spi_errno(spi), "Error: %s", spi_errmsg(spi)); return 0; } return lua_spi_error(L, SPI_ERROR_ARG, 0, "Error: unknown property"); }