@@ -1908,19 +1908,19 @@ void bbepInitLights(FASTEPDSTATE *pState, uint8_t led1, uint8_t led2)
19081908void it8951WaitForReady (FASTEPDSTATE *pState)
19091909{
19101910 const uint32_t start = millis ();
1911- while (gpio_get_level (( gpio_num_t ) pState->u8Busy ) == LOW) {
1911+ while (digitalRead ( pState->u8Busy ) == LOW) {
19121912 if (millis () - start > 3000 ) {
19131913 // Serial-only — HRDY timeouts are expected during the multi-attempt probe sequence
19141914 // Serial.println("HRDY timeout");
19151915 break ;
19161916 }
1917- vTaskDelay (pdMS_TO_TICKS ( 1 ) );
1917+ vTaskDelay (10 );
19181918 }
19191919} /* it8951WaitForReady() */
19201920
19211921void it8951WriteNData (FASTEPDSTATE *pState, const uint16_t *buf, uint32_t word_count) {
1922- #ifdef ARDUINO
19231922 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
1923+ #ifdef ARDUINO
19241924 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
19251925 // it8951GetSystemInfo(pState);
19261926 it8951WaitForReady (pState);
@@ -1930,34 +1930,49 @@ void it8951WriteNData(FASTEPDSTATE *pState, const uint16_t *buf, uint32_t word_c
19301930 SPI.transfer16 (buf[i]);
19311931 }
19321932 SPI.endTransaction ();
1933- gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
1933+ #elif defined (__LINUX__)
1934+ it8951WaitForReady (pState);
1935+ for (uint32_t i = 0 ; i < word_count; i++) {
1936+ linux_spi_write16 (buf[i], pState->spi_frequency );
1937+ }
19341938#endif // ARDUINO
1939+ gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
19351940} /* i8951WriteNData() */
19361941
19371942void it8951WriteData (FASTEPDSTATE *pState, uint16_t data) {
1938- #ifdef ARDUINO
19391943 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
1944+ #ifdef ARDUINO
19401945 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
19411946 it8951WaitForReady (pState);
19421947 SPI.transfer16 (0x0000 ); // data preamble
19431948 it8951WaitForReady (pState);
19441949 SPI.transfer16 (data);
19451950 SPI.endTransaction ();
1951+ #elif defined (__LINUX__)
1952+ it8951WaitForReady (pState);
1953+ linux_spi_write16 (0 , pState->spi_frequency );
1954+ it8951WaitForReady (pState);
1955+ linux_spi_write16 (data, pState->spi_frequency );
1956+ #endif
19461957 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
1947- #endif // ARDUINO
19481958} /* it8951WriteData() */
19491959
19501960void it8951WriteCmdCode (FASTEPDSTATE *pState, uint16_t cmd) {
1951- #ifdef ARDUINO
19521961 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
1962+ #ifdef ARDUINO
19531963 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
19541964 it8951WaitForReady (pState);
19551965 SPI.transfer16 (0x6000 ); // command preamble
19561966 it8951WaitForReady (pState);
19571967 SPI.transfer16 (cmd);
19581968 SPI.endTransaction ();
1969+ #elif defined(__LINUX__)
1970+ it8951WaitForReady (pState);
1971+ linux_spi_write16 (0x6000 , pState->spi_frequency );
1972+ it8951WaitForReady (pState);
1973+ linux_spi_write16 (cmd, pState->spi_frequency );
1974+ #endif
19591975 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
1960- #endif // ARDUINO
19611976} /* it8951WriteCmdCode() */
19621977
19631978void it8951SendCmdArg (FASTEPDSTATE *pState, uint16_t cmd, uint16_t *args, uint16_t num_args)
@@ -1976,26 +1991,31 @@ void it8951WriteVcom(FASTEPDSTATE *pState, uint16_t selector, uint16_t value)
19761991}
19771992
19781993uint16_t it8951ReadData (FASTEPDSTATE *pState) {
1979- # ifdef ARDUINO
1994+ uint16_t data = 0 ;
19801995 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
1996+ #ifdef ARDUINO
19811997 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
19821998 it8951WaitForReady (pState);
19831999 SPI.transfer16 (0x1000 ); // read preamble
19842000 SPI.transfer16 (0 ); // dummy read
19852001 it8951WaitForReady (pState);
1986- const uint16_t data = SPI.transfer16 (0 );
2002+ data = SPI.transfer16 (0 );
19872003 SPI.endTransaction ();
2004+ #elif defined (__LINUX__)
2005+ it8951WaitForReady (pState);
2006+ linux_spi_write16 (0x1000 , pState->spi_frequency ); // read preamble
2007+ linux_spi_write16 (0 , pState->spi_frequency ); // dummy write
2008+ it8951WaitForReady (pState);
2009+ data = linux_spi_read16 (pState->spi_frequency );
2010+ #endif
19882011 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
19892012 return data;
1990- #else
1991- return 0 ;
1992- #endif
19932013} /* it8951ReadData() */
19942014
19952015void it8951ReadNData (FASTEPDSTATE *pState, uint16_t *buf, uint32_t word_count)
19962016{
1997- #ifdef ARDUINO
19982017 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
2018+ #ifdef ARDUINO
19992019 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
20002020 it8951WaitForReady (pState);
20012021 SPI.transfer16 (0x1000 ); // read preamble
@@ -2006,8 +2026,17 @@ void it8951ReadNData(FASTEPDSTATE *pState, uint16_t *buf, uint32_t word_count)
20062026 buf[i] = SPI.transfer16 (0 );
20072027 }
20082028 SPI.endTransaction ();
2009- gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
2029+ #elif defined (__LINUX__)
2030+ it8951WaitForReady (pState);
2031+ linux_spi_write16 (0x1000 , pState->spi_frequency ); // read preamble
2032+ it8951WaitForReady (pState);
2033+ linux_spi_write16 (0 , pState->spi_frequency ); // dummy write
2034+ it8951WaitForReady (pState);
2035+ for (uint32_t i=0 ; i<word_count; i++) {
2036+ buf[i] = linux_spi_read16 (pState->spi_frequency );
2037+ }
20102038#endif // ARDUINO
2039+ gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
20112040} /* it8951ReadNData() */
20122041
20132042uint16_t it8951ReadReg (FASTEPDSTATE *pState, uint16_t addr)
@@ -2032,7 +2061,7 @@ void it8951WaitForLUTReady(FASTEPDSTATE *pState) {
20322061 break ;
20332062 }
20342063 // yield();
2035- vTaskDelay (pdMS_TO_TICKS ( 10 ) );
2064+ vTaskDelay (100 );
20362065 }
20372066} /* it8951WaitForLUTReady() */
20382067
@@ -2117,7 +2146,6 @@ IT8951DevInfo dev_info_;
21172146
21182147void it8951WriteFramebuffer1Bit (FASTEPDSTATE *pState)
21192148{
2120- #ifdef ARDUINO
21212149uint8_t *s;
21222150int iPitch;
21232151
@@ -2130,9 +2158,14 @@ int iPitch;
21302158
21312159// Serial.println("About to start data");
21322160 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
2161+ #ifdef ARDUINO
21332162 SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
21342163 it8951WaitForReady (pState);
21352164 SPI.transfer16 (0x0000 ); // data preamble
2165+ #elif defined (__LINUX__)
2166+ it8951WaitForReady (pState);
2167+ linux_spi_write16 (0 , pState->spi_frequency );
2168+ #endif
21362169 it8951WaitForReady (pState);
21372170
21382171 s = pState->pCurrent ;
@@ -2143,16 +2176,26 @@ int iPitch;
21432176 for (int x = 0 ; x<iPitch; x++) {
21442177 d[iPitch - 1 - x] = s[x];
21452178 }
2179+ #ifdef ARDUINO
21462180 SPI.writeBytes (d, iPitch);
2181+ #elif defined(__LINUX__)
2182+ linux_spi_write (d, iPitch, pState->spi_frequency );
2183+ #endif
21472184 } else {
2185+ #ifdef ARDUINO
21482186 SPI.writeBytes (s, iPitch);
2187+ #elif defined(__LINUX__)
2188+ linux_spi_write (s, iPitch, pState->spi_frequency );
2189+ #endif
21492190 }
21502191 if ((y & 0x07 ) == 0 ) {
21512192 yield ();
21522193 }
21532194 s += iPitch;
21542195 }
2196+ #ifdef ARDUINO
21552197 SPI.endTransaction ();
2198+ #endif
21562199 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
21572200// Serial.println("Data sent");
21582201 // finish the operation
@@ -2162,12 +2205,10 @@ int iPitch;
21622205 IT8951EinkPower (pState, 0 );
21632206
21642207// Serial.println("finish update");
2165- #endif // ARDUINO
21662208} /* it8951WriteFramebuffer1Bit() */
21672209
21682210void it8951WriteFramebuffer4Bit (FASTEPDSTATE *pState)
21692211{
2170- #ifdef ARDUINO
21712212uint8_t *s;
21722213int iPitch;
21732214
@@ -2182,9 +2223,13 @@ int iPitch;
21822223
21832224
21842225 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
2185- SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
21862226 it8951WaitForReady (pState);
2227+ #ifdef ARDUINO
2228+ SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
21872229 SPI.transfer16 (0x0000 ); // data preamble
2230+ #elif defined(__LINUX__)
2231+ linux_spi_write16 (0 , pState->spi_frequency );
2232+ #endif
21882233 it8951WaitForReady (pState);
21892234
21902235 s = pState->pCurrent ;
@@ -2195,28 +2240,35 @@ int iPitch;
21952240 for (int x = 0 ; x<iPitch; x++) {
21962241 d[iPitch - 1 - x] = (s[x] >> 4 ) | (s[x] << 4 );
21972242 }
2243+ #ifdef ARDUINO
21982244 SPI.writeBytes (d, iPitch);
2245+ #elif defined(__LINUX__)
2246+ linux_spi_write (d, iPitch, pState->spi_frequency );
2247+ #endif
21992248 } else {
2249+ #ifdef ARDUINO
22002250 SPI.writeBytes (s, iPitch);
2251+ #elif defined(__LINUX__)
2252+ linux_spi_write (s, iPitch, pState->spi_frequency );
2253+ #endif
22012254 }
22022255 if ((y & 0x07 ) == 0 ) {
22032256 yield ();
22042257 }
22052258 s += iPitch;
22062259 }
2207-
2260+ # ifdef ARDUINO
22082261 SPI.endTransaction ();
2262+ #endif
22092263 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
22102264 it8951WriteCmdCode (pState, IT8951_TCON_LD_IMG_END);
22112265 it8951DisplayArea (pState, 0 , 0 , pState->native_width , pState->native_height , 2 );
22122266 it8951WaitForReady (pState);
22132267 IT8951EinkPower (pState, 0 );
2214- #endif // ARDUINO
22152268} /* it8951WriteFramebuffer4Bit() */
22162269
22172270void it8951WriteFramebuffer2Bit (FASTEPDSTATE *pState)
22182271{
2219- #ifdef ARDUINO
22202272uint8_t *s;
22212273int iPitch;
22222274
@@ -2229,11 +2281,14 @@ int iPitch;
22292281
22302282 it8951LoadImgAreaStart (pState, (pState->iFlags & BB_PANEL_FLAG_MIRROR_X) ? IT8951_LDIMG_B_ENDIAN : IT8951_LDIMG_L_ENDIAN, IT8951_2BPP, 0 , 0 , 0 , pState->native_width , pState->native_height );
22312283
2232-
22332284 gpio_set_level ((gpio_num_t )pState->u8CS , LOW);
2234- SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
22352285 it8951WaitForReady (pState);
2286+ #ifdef ARDUINO
2287+ SPI.beginTransaction (SPISettings (pState->spi_frequency , MSBFIRST, SPI_MODE0));
22362288 SPI.transfer16 (0x0000 ); // data preamble
2289+ #elif defined(__LINUX__)
2290+ linux_spi_write16 (0 , pState->spi_frequency );
2291+ #endif
22372292 it8951WaitForReady (pState);
22382293
22392294 s = pState->pCurrent ;
@@ -2245,23 +2300,32 @@ int iPitch;
22452300 uint8_t a = s[x];
22462301 d[iPitch - 1 - x] = (a >> 6 ) | ((a >> 2 ) & 0xc ) | ((a & 0xc ) << 2 ) | ((a & 3 ) << 6 );
22472302 }
2303+ #ifdef ARDUINO
22482304 SPI.writeBytes (d, iPitch);
2305+ #elif defined(__LINUX__)
2306+ linux_spi_write (d, iPitch, pState->spi_frequency );
2307+ #endif
22492308 } else {
2309+ #ifdef ARDUINO
22502310 SPI.writeBytes (s, iPitch);
2311+ #elif defined(__LINUX__)
2312+ linux_spi_write (s, iPitch, pState->spi_frequency );
2313+ #endif
22512314 }
22522315 if ((y & 0x07 ) == 0 ) {
22532316 yield ();
22542317 }
22552318 s += iPitch;
22562319 }
22572320
2321+ #ifdef ARDUINO
22582322 SPI.endTransaction ();
2323+ #endif
22592324 gpio_set_level ((gpio_num_t )pState->u8CS , HIGH);
22602325 it8951WriteCmdCode (pState, IT8951_TCON_LD_IMG_END);
22612326 it8951DisplayArea (pState, 0 , 0 , pState->native_width , pState->native_height , 2 );
22622327 it8951WaitForReady (pState);
22632328 IT8951EinkPower (pState, 0 );
2264- #endif // ARDUINO
22652329} /* it8951WriteFramebuffer2Bit() */
22662330
22672331//
@@ -2287,6 +2351,8 @@ int bbepInitIT8951(FASTEPDSTATE *pState, uint8_t u8MOSI, uint8_t u8MISO, uint8_t
22872351 gpio_set_level ((gpio_num_t )u8ITE_EN, HIGH);
22882352#ifdef ARDUINO
22892353 SPI.begin (u8CLK, u8MISO, u8MOSI, -1 );
2354+ #else
2355+ linux_spi_init (u8MISO, u8MOSI, u8CLK);
22902356#endif // ARDUINO
22912357 pState->spi_frequency = IT8951_SPI_PROBE_FREQUENCY;
22922358
0 commit comments