From fa46a12bf72b966806948d661c8d7387f209bfeb Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 08:56:09 -0400 Subject: [PATCH 01/32] skip first time for SSTV --- cubesatsim/cubesatsim.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index b3ad0d25..74faffab 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -203,6 +203,7 @@ void loop() { } else if (mode == SSTV) { + first_time_sstv = false; char image_file[128]; if (first_time_sstv) { // if (false) { // turn this off for now @@ -228,6 +229,7 @@ void loop() { char output_file[] = "/cam.bin"; jpeg_decode(image_file, output_file, debug_mode); + rotate if (debug_mode) Serial.println("Start transmit!!!"); From ac8d1e69aff4528354e5392420af237198251ab4 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 08:59:35 -0400 Subject: [PATCH 02/32] fixed rotate --- cubesatsim/cubesatsim.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 74faffab..8e14a405 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -229,7 +229,8 @@ void loop() { char output_file[] = "/cam.bin"; jpeg_decode(image_file, output_file, debug_mode); - rotate + char telem_display[] = " Battery: Status: "; + rotate_image(output_file, output_file, telem_display); if (debug_mode) Serial.println("Start transmit!!!"); From e3a4cee8514b19f04c9c16a48712fef161ddebb8 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 09:25:56 -0400 Subject: [PATCH 03/32] removed unneeded and made bytes --- cubesatsim/cubesatsim.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cubesatsim/cubesatsim.h b/cubesatsim/cubesatsim.h index dd7eb8eb..15482d55 100644 --- a/cubesatsim/cubesatsim.h +++ b/cubesatsim/cubesatsim.h @@ -33,7 +33,7 @@ #include "hardware/pwm.h" // pwm #include "hardware/sync.h" // wait for interrupt #include "RPi_Pico_TimerInterrupt.h" -#include +//#include #include "hardware/gpio.h" #include "hardware/adc.h" #include @@ -137,7 +137,7 @@ char serial_string[128]; //#define WAV_DATA_LENGTH (50000 * 8) uint32_t tx_freq_hz = 434900000 + FREQUENCY_OFFSET; -uint8_t data[1024]; +//uint8_t data[1024]; uint32_t tx_channel = 0; //ax5043_conf_t hax5043; @@ -231,7 +231,8 @@ long time_start; //char cmdbuffer[1000]; //FILE * file1;// #define BUFFER_SIZE 5841 //970 // (970 * 2) // * 2) -short int buffer[BUFFER_SIZE]; // 50000]; //BUFFER_SIZE]; // ctr is an int // 100000]; // 50000]; // 25000]; // 10240]; // was 2336400]; // max size for 10 frames count of BPSK +//short int buffer[BUFFER_SIZE]; // 50000]; //BUFFER_SIZE]; // ctr is an int // 100000]; // 50000]; // 25000]; // 10240]; // was 2336400]; // max size for 10 frames count of BPSK +byte buffer[BUFFER_SIZE]; // 50000]; //BUFFER_SIZE]; // ctr is an int // 100000]; // 50000]; // 25000]; // 10240]; // was 2336400]; // max size for 10 frames count of BPSK //short int buffer[(WAV_DATA_LENGTH/8)]; //FILE *sopen(const char *program); char tlm_str[1000]; @@ -372,7 +373,8 @@ bool timer0_on = false; char callsign[20]; int morse_timing = 60; // ms for a dit int morse_freq = 1800; // Hz -int morse_table[44][6] = { // 0-9, A-Z only by (ASCII - 48) +//int morse_table[44][6] = { // 0-9, A-Z only by (ASCII - 48) +byte morse_table[44][6] = { // 0-9, A-Z only by (ASCII - 48) { 3, 3, 3, 3, 3, 0 }, // 0 { 1, 3, 3, 3, 3, 0 }, // 1 { 1, 1, 3, 3, 3, 0 }, // 2 From 09a32195922948a45ab5a980c706379677c055bd Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 09:31:39 -0400 Subject: [PATCH 04/32] removed all wifi code --- cubesatsim/cubesatsim.ino | 42 +++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 8e14a405..2b006290 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -36,7 +36,7 @@ #include "hardware/sync.h" // wait for interrupt #include "RPi_Pico_ISR_Timer.h" #include "RPi_Pico_TimerInterrupt.h" -#include +//#include #include "hardware/gpio.h" #include "hardware/adc.h" #include "SSTV-Arduino-Scottie1-Library.h" @@ -55,8 +55,8 @@ Adafruit_INA219 ina219_2_0x41(0x41); Adafruit_INA219 ina219_2_0x44(0x44); Adafruit_INA219 ina219_2_0x45(0x45); -WiFiServer server(port); -WiFiClient client; +//WiFiServer server(port); +//WiFiClient client; //#define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W @@ -235,7 +235,7 @@ void loop() { if (debug_mode) Serial.println("Start transmit!!!"); digitalWrite(PTT_PIN, LOW); // start transmit - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); digitalWrite(MAIN_LED_BLUE, HIGH); @@ -244,7 +244,7 @@ void loop() { if (debug_mode) Serial.println("Stop transmit!"); digitalWrite(PTT_PIN, HIGH); // stop transmit - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); digitalWrite(MAIN_LED_BLUE, LOW); @@ -263,14 +263,14 @@ void loop() { // test_radio(); if ((mode == FSK) || (mode == BPSK)) { - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, LOW); digitalWrite(MAIN_LED_BLUE, LOW); // delay(3000); sleep(0.2); // 2.845); // 3.0); - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); digitalWrite(MAIN_LED_BLUE, HIGH); } @@ -311,7 +311,7 @@ bool TimerHandler1(struct repeating_timer *t) { if (BOOTSEL) // boot selector button is pressed on Pico process_bootsel(); - if (wifi) +// if (wifi) check_for_browser(); return(true); @@ -2637,6 +2637,7 @@ void read_payload() // delay(100); } +/* void payload_OK_only() { payload_str[0] = '\0'; // clear the payload string @@ -2824,7 +2825,8 @@ void payload_OK_only() delay(100); } - + +*/ /* void eeprom_word_write(int addr, int val) { @@ -3151,7 +3153,7 @@ void process_pushbutton() { // return; /// just skip for now - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); // make sure built in LED is on before starting to blink sleep(1.0); @@ -3249,7 +3251,7 @@ void process_bootsel() { int release = FALSE; - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); // make sure built in LED is on before blinking sleep(1.0); @@ -3344,11 +3346,11 @@ void process_bootsel() { void blinkTimes(int blinks) { for (int i = 0; i < blinks; i++) { digitalWrite(MAIN_LED_GREEN, LOW); - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, LOW); sleep(0.1); digitalWrite(MAIN_LED_GREEN, HIGH); - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, HIGH); sleep(0.1); } @@ -3372,7 +3374,7 @@ void config_gpio() { pinMode(AUDIO_OUT_PIN, OUTPUT); // set LEDs and blink once - if (!wifi) +// if (!wifi) pinMode(LED_BUILTIN, OUTPUT); // Set LED pin to output pinMode(MAIN_LED_GREEN, OUTPUT); // Set Main Green LED pin to output blink_pin(MAIN_LED_GREEN, 150); @@ -3548,6 +3550,7 @@ void client_print_string(char *string) client.println(" "); } +/* bool check_for_wifi() { #ifndef PICO_W @@ -3631,13 +3634,13 @@ void check_for_browser() { } } } -/* + Serial.println(" "); print_string(var); print_string(val); Serial.println(" "); Serial.println(strlen(val)); -*/ + if (!strcmp(var, "call") && (strlen(val) > 0)) { Serial.print("Changing callsign to "); print_string(val); @@ -3680,9 +3683,10 @@ void configure_wifi() { server.begin(); } } - +*/ + void transmit_cw(int freq, float duration) { // freq in Hz, duration in milliseconds - if (!wifi) + // if (!wifi) digitalWrite(LED_BUILTIN, HIGH); // Transmit LED on digitalWrite(MAIN_LED_BLUE, HIGH); @@ -3697,7 +3701,7 @@ void transmit_cw(int freq, float duration) { // freq in Hz, duration in millise sleep(min(time_left, period_us) / 1.0E6); } digitalWrite(AUDIO_OUT_PIN, LOW); - if (!wifi) +// if (!wifi) digitalWrite(LED_BUILTIN, LOW); // Transmit LED off digitalWrite(MAIN_LED_BLUE, LOW); } From 591cff4b0d9bee39a95a9d2c0b4c20ea88abdac6 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 09:34:02 -0400 Subject: [PATCH 05/32] fixed write_wave --- cubesatsim/cubesatsim.ino | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 2b006290..7d196612 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -1333,7 +1333,8 @@ void get_tlm_fox() { } } -void write_wave(int i, short int *buffer) +//void write_wave(int i, short int *buffer) +void write_wave(int i, byte *buffer) { if (mode == FSK) { @@ -3539,7 +3540,8 @@ void start_button_isr() { Serial.println(F("Can't set ITimer1. Select another Timer, freq. or timer")); } - + +/* void client_print_string(char *string) { int count = 0; @@ -3550,7 +3552,6 @@ void client_print_string(char *string) client.println(" "); } -/* bool check_for_wifi() { #ifndef PICO_W From 1280379e7227898f32c495cfe89057bef706530a Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 09:39:08 -0400 Subject: [PATCH 06/32] Update cubesatsim.ino --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 7d196612..5e566df4 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -312,7 +312,7 @@ bool TimerHandler1(struct repeating_timer *t) { process_bootsel(); // if (wifi) - check_for_browser(); +// check_for_browser(); return(true); } From ba9f3a90465ce3e1aa02a3ac2345a974c5797da6 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:10:37 -0400 Subject: [PATCH 07/32] added rotate code --- .../esp32-cam-send-jpeg-serial.ino | 720 ++++++++++++++++++ 1 file changed, 720 insertions(+) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 71449d30..860894ee 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -25,6 +25,7 @@ #include #include "FS.h" #include "SPIFFS.h" +#include // some info: https://visualgdb.com/tutorials/esp32/camera/ @@ -461,3 +462,722 @@ void send_image_serial(char *filename) } Serial.println("File sent!"); } + +void print_hex(byte octet) { + char hexValue[5]; + sprintf(hexValue, "%02X", octet); + Serial.print(hexValue); +} + +char img_block[320][8][3]; // 320 pixels per row, 8 rows, 3 values (RGB) per. + +bool get_block(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) +{ +#ifdef DEBUG + Serial.println("\nBlock callback"); + Serial.println(x); + Serial.println(y); + Serial.println(w); + Serial.println(h); +#endif + +// return 1; + + uint16_t pixel_value; + uint16_t *pixel; + bool last_block = ((x == (320 - w)) & (y == (240 - h))); +// char buffer[16 * 8 * 3]; + int counter = 0; + //int x_block = (x / w) % w; + //int y_block = (y / h) % h; + +/* + if (((y % h) == 0) && ((x % w) == 0)) { + Serial.print("\nStart of row! x = "); + Serial.print(x); + Serial.print(" y = "); + Serial.println(y); + } +*/ + pixel = bitmap; + uint32_t total_pixels = w * h; + +// while (total_pixels--) { + while (counter < total_pixels) { + pixel_value = *pixel; + + int y_rel = counter / w; + int x_rel = counter % w; // - y_rel * w; +/* + Serial.print("Relative x + x = "); + Serial.print(x_rel + x); + Serial.print(" y + y = "); + Serial.print(y_rel); + Serial.print(" counter = "); + Serial.println(counter); +*/ + /* + if ((x == 0) && (y == 0)) { + Serial.print(" "); + Serial.print(pixel_value, HEX); + Serial.print(" "); + } +*/ +// buffer[counter++] = pixel_value >> 8; +// buffer[counter++] = pixel_value; + + byte red = (pixel_value & 0b1111100000000000) >> 8; + byte green = (pixel_value & 0b0000011111100000) >> 3; + byte blue = (pixel_value & 0b0000000000011111) << 3; + +// buffer[counter++] = red; +// buffer[counter++] = green; +// buffer[counter++] = blue; + + img_block[x_rel + x][y_rel][0] = red; + img_block[x_rel + x][y_rel][1] = green; + img_block[x_rel + x][y_rel][2] = blue; + +#ifdef DEBUG + Serial.print("\npixel_value: "); + Serial.print(pixel_value); + Serial.print("\nRGB: "); + print_hex(red); + print_hex(green); + print_hex(blue); + + Serial.println("\n img_block: "); + for (int k = 0; k < 3; k ++) + print_hex(*(&img_block[x_rel + x][y_rel][0] + k)); +#endif + /* + if (counter >= 155000) { + Serial.println("Resetting counter****************************************\n"); + counter = 0; + } +*/ + counter++; + pixel++; + } + +// Serial.println("\nWriting block to file"); +// Serial.print("Sizeof buffer: "); +// Serial.println(sizeof(buffer)); + if (x == 304) { + if (outFile) { + Serial.println("********************************************* Writing block!"); + outFile.write(&img_block[0][0][0], sizeof(img_block)); + } else + Serial.println("Problem writing block"); + counter = 0; + } + if (last_block) { + Serial.println("Complete!\n\n"); + } +/* + for (int i = 0; i < counter; i++) { +// Serial.print(buffer[i], HEX); + char hexValue[5]; + sprintf(hexValue, "%02X", buffer[i]); + Serial.print(hexValue); + } + */ + +// Serial.print("\n\n Size: "); +// Serial.println(counter); + +// write_complete = true; +// } + +// delay(1000); + + blocks++; + + return 1; +} + +int JpegDec_i; +int JpegDec_j; +int JpegDec_height = 240; +int JpegDec_width = 320; +byte JpegDec_sortBuf[15360]; //320(px)*16(lines)*3(bytes) // Header buffer +int JpegDec_pxSkip; +uint8_t *JpegDec_pImg; +int JpegDec_x, JpegDec_y, JpegDec_bx, JpegDec_by; +int JpegDec_comps = 3; + +bool merged_get_block(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) +{ +#ifdef DEBUG + Serial.println("\nBlock callback"); + Serial.println(x); + Serial.println(y); + Serial.println(w); + Serial.println(h); +#endif + int JpegDec_MCUx = x; + int JpegDec_MCUy = y; + int JpegDec_MCUHeight = h; + int JpegDec_MCUWidth = w; + +// JpegDec_pImg = bitmap; + +// JpegDec_pImg = JpegDec_pImage; + for(JpegDec_by=0; JpegDec_by> 8; + byte green = (pixel_value & 0b0000011111100000) >> 3; + byte blue = (pixel_value & 0b0000000000011111) << 3; + + JpegDec_sortBuf[(3 * JpegDec_pxSkip) + 0] = red; // JpegDec_pImg[0]; + JpegDec_sortBuf[(3 * JpegDec_pxSkip) + 1] = green; // JpegDec_pImg[1]; + JpegDec_sortBuf[(3 * JpegDec_pxSkip) + 2] = blue; // JpegDec_pImg[2]; +#ifdef DEBUG + Serial.print("sortBuf index = "); + Serial.println((3 * JpegDec_pxSkip)); +#endif + JpegDec_i++; + if(JpegDec_i == 5120){ //320(px)x16(lines) +#ifdef DEBUG + Serial.println("Writing lines!"); +#endif + // for(k = 0; k < 15360; k++){ +// imgFile.write(sortBuf[k]); +// } + outFile.write(JpegDec_sortBuf, sizeof(JpegDec_sortBuf)); + JpegDec_i = 0; + JpegDec_j++; //15(sections) + } + } + } +// JpegDec_pImg += JpegDec_comps ; + bitmap++; + } + } +#ifdef DEBUG + Serial.println("Block processed!"); +#endif + return 1; +} + +void jpeg_decode(char* filename, char* fileout, bool debug){ + uint8_t *pImg; +// uint16_t *pImg; + int x,y, bx,by; + byte sortBuf[15360]; //320(px)*16(lines)*3(bytes) // Header buffer + int i,j,k; + int pxSkip; + + // Open the file for writing +// File imgFile = SD.open(fileout, FILE_WRITE); + outFile = LittleFS.open(fileout, "w+"); + + if (outFile) { + if (debug) + Serial.println("Output opened"); + } + else + Serial.println("Failed to open output"); + + for(i = 0; i < 15360; i++){ // Cleaning Header Buffer array + sortBuf[i] = 0xFF; + } + + for(i = 0; i < 12; i++){ + byte fontNumber; + char ch; + ch = charId[i]; + for(y = 0; y < 11; y++){ + for(x = 0; x < 8; x++){ + pxSkip = 16 + (320 * (y + 3)) + (3 * 8 * i) + (3 * x); //Width: x3 + + uint8_t mask; + mask = pow(2, 7 - x); + + if(ch >= 65 && ch <= 90){ // A to Z + fontNumber = ch - 65; + } + else if(ch >= 48 && ch <= 57){ //0 to 9 + fontNumber = ch - 22; + } + else if(ch == '/'){fontNumber = 36;} + else if(ch == '-'){fontNumber = 37;} + else if(ch == '.'){fontNumber = 38;} + else if(ch == '?'){fontNumber = 39;} + else if(ch == '!'){fontNumber = 40;} + else if(ch == ':'){fontNumber = 41;} + else if(ch == ' '){fontNumber = 42;} + else {fontNumber = 42;} + + if((b_fonts[fontNumber][y] & mask) != 0){ + for(j = 0; j < 9; j++){ + sortBuf[(3 * pxSkip) + j] = 0x00; + } + } + } + } + } + +// for(k = 0; k < 15360; k++){ // Adding header to the binary file +// imgFile.write(sortBuf[k]); +// } + outFile.write(sortBuf, sizeof(sortBuf)); + +// writeFooter(&outFile); //Writing first 10560 bytes (11*320*3) // write footer after rotate + + // Decoding start + + if (debug) + Serial.println("Starting jpeg decode"); + + JpegDec_i = 0; + JpegDec_j = 0; + + uint16_t w = 0, h = 0; + // TJpgDec.getFsJpgSize(&w, &h, "/cam.jpg", LittleFS); // Note name preceded with "/" + TJpgDec.getFsJpgSize(&w, &h, filename, LittleFS); // Note name preceded with "/" + + if (debug) { + Serial.print("Width = "); + Serial.print(w); + Serial.print(", height = "); + Serial.println(h); + } + + if ((w == 0) && (h == 0)) { + Serial.println("Failed to open jpeg input"); + return; + } +// counter = 0; +// write_complete = false; + + TJpgDec.setJpgScale(1); + TJpgDec.setSwapBytes(false); // was true +// TJpgDec.setCallback(get_block); + TJpgDec.setCallback(merged_get_block); + //TJpgDec.drawFsJpg(0, 0, "/cam.jpg", LittleFS); + TJpgDec.drawFsJpg(0, 0, filename, LittleFS); + + if (debug) + Serial.println("Draw complete"); + +// while (!write_complete) { Serial.println("Waiting..."); delay(500);} + +/* + JpegDec.decodeFile(filename); + // Image Information + Serial.print("Width :"); + Serial.println(JpegDec.width); + Serial.print("Height :"); + Serial.println(JpegDec.height); + Serial.print("Components:"); + Serial.println(JpegDec.comps); + Serial.print("MCU / row :"); + Serial.println(JpegDec.MCUSPerRow); + Serial.print("MCU / col :"); + Serial.println(JpegDec.MCUSPerCol); + Serial.print("Scan type :"); + Serial.println(JpegDec.scanType); + Serial.print("MCU width :"); + Serial.println(JpegDec.MCUWidth); + Serial.print("MCU height:"); + Serial.println(JpegDec.MCUHeight); + Serial.println(""); +*/ + if (debug) + Serial.println("Writing bin to FS"); + +// imgFile.write(JpegDec.pImage, sizeof(JpegDec.pImage)); + +/* + i = 0; + j = 0; + while(JpegDec.read()){ + pImg = JpegDec.pImage ; + for(by=0; by 0) { + // read 32 bytes at a time; + uint8_t *buffer; + uint8_t bytesToRead = min(32, jpglen); // change 32 to 64 for a speedup but may not work with all setups! + buffer = cam.readPicture(bytesToRead); + imgFile.write(buffer, bytesToRead); + if(++wCount >= 64) { // Every 2K, give a little feedback so it doesn't appear locked up + Serial.print('.'); + wCount = 0; + } + //Serial.print("Read "); Serial.print(bytesToRead, DEC); Serial.println(" bytes"); + jpglen -= bytesToRead; + } + imgFile.close(); + time = millis() - time; + Serial.println("done!"); + Serial.print(time); Serial.println(" ms elapsed"); + +*/ +//} + +/** Write on a file with 11 lines the values of the GPS + * @param dst Given an opened File stream then write data to dst. + * @param latitude Floating point latitude value in degrees/min as received from the GPS (DDMM.MMMM) + * @param lat N/S + * @param longitude Floating point longitude value in degrees/min as received from the GPS (DDMM.MMMM) + * @param lon E/W + * @param altitude Altitude in meters above MSL + */ + +/* +//void writeFooter(File* dst, nmea_float_t latitude, char lat, nmea_float_t longitude, char lon, nmea_float_t altitude){ //Write 16 lines with values +void writeFooter(File* dst){ + int x,y; + byte sortBuf[10560]; //320(px)*11(lines)*3(bytes) // Header buffer + int i,j,k; + int pxSkip; + char res[51] = "LAT: 1234.1234N LONG: 1234.1234W ALT:10000"; + for(i = 0; i < 10560; i++){ // Cleaning Header Buffer array + sortBuf[i] = 0xFF; + } + for(i = 0; i < sizeof(res); i++){ + byte fontNumber; + char ch; + ch = res[i]; + for(y = 0; y < 5; y++){ + for(x = 0; x < 4; x++){ + //pxSkip = HORIZONTALOFFSET + VERSTICALOFFSET + (BITSPERWORD * i); + //pxSkip = 16 + (320 * (y + 3)) + (4 * 2 * i) + (2 * x); Width: x2 + pxSkip = 16 + (320 * (y + 3)) + (4 * i) + x; + // If ch is pair mask is: 11110000, if no 00001111 + uint8_t sl = (ch % 2)? 3 : 7 ; + uint8_t mask = pow(2, sl - x); + if(ch >= 48 && ch <=91){ + fontNumber = (ch-48)/2; + } + else { + fontNumber = 22; + } + if((l_fonts[fontNumber][y] & mask) != 0){ + for(j = 0; j < 3; j++){ + sortBuf[(3 * pxSkip) + j] = 0x00; + } + } + } + } + } +// for(k = 0; k < 10560; k++){ // Adding header to the binary file +// dst->write(sortBuf[k]); + dst->write(sortBuf, sizeof(sortBuf)); +// } +} +*/ + +void raw_decode(char* filename, char* fileout){ // used to decode .raw files in RGB565 format + +// Open the input file for reading + inFile = LittleFS.open(filename, "r"); + + if (inFile) + Serial.println("Input opened"); + else { + Serial.println("Failed to open input"); + return; + } +// Open the output file for writing + outFile = LittleFS.open(fileout, "w+"); + + if (outFile) + Serial.println("Output opened"); + else { + Serial.println("Failed to open output"); + return; + } + char buff[2]; + char buffer[3]; + + int i = 0; +// int redx = 128; +// int greenx = 128; +// int bluex = 128; + +// while (i++ < (320 * 240 * 3)) { + while (i++ < (320 * 240 * 1.49)) { + inFile.readBytes(buff, 2); + +#ifdef DEBUG + print_hex(buff[0]); + print_hex(buff[1]); +#endif + + int pixel_value = (buff[0] << 8) + buff[1]; // endian for raw + + byte red = (pixel_value & 0b1111100000000000) >> 8; + byte green = (pixel_value & 0b0000011111100000) >> 3; + byte blue = (pixel_value & 0b0000000000011111) << 3; + +#ifdef TEST_PATTERN + int size = 5; // 46; + int y = (int)( i / 320 ); + int x = (int)( i - y * 320 ); + int box = (int)(x/size) + (int)(y/size); + + if (y < 10) { // 20) { + red = 0; + green = 255; + blue = 0; + } + else if ( box == ( (int)(box / 2) * 2)) { +// Serial.println(x); +// Serial.println(y); +// Serial.println(box); +// Serial.println(" "); + red = 255; //(100 + x) % 256; + green = 0; // ; + blue = 0; + } else { +// Serial.println(x); +// Serial.println(y); +// Serial.println(box); +// Serial.println(" "); + red = 0; + green = 0; + blue = 255; //(100 + y) % 256; + } +#endif + + buffer[0] = red; + buffer[1] = green; + buffer[2] = blue; +/* + if (y < 20) { // 20) { + buffer[0] = 0; + buffer[1] = 255; + buffer[2] = 0; + } else { + + buffer[0] = redx; + buffer[1] = greenx; + buffer[2] = bluex; + } + */ + + int bytes = outFile.write(buffer, 3); +// Serial.println(bytes); + if (bytes < 3) + Serial.println("Error writing output file"); + + #ifdef DEBUG + print_hex(red); + print_hex(green); + print_hex(blue); + +// delay(100); + #endif + } + inFile.close(); + outFile.close(); +} + +/* +//void writeFooter(File* dst, nmea_float_t latitude, char lat, nmea_float_t longitude, char lon, nmea_float_t altitude){ //Write 16 lines with values +void writeFooter(File* dst, char *telemetry){ + int x,y; + byte sortBuf[10560]; //320(px)*11(lines)*3(bytes) // Header buffer + int i,j,k; + int pxSkip; + + char res[51]; // = "LAT: 1234.1234N LONG: 1234.1234W ALT:10000"; + + if (strlen(telemetry) > 50) + telemetry[50] = '\0'; + strcpy(res, telemetry); + + for(i = 0; i < 10560; i++){ // Cleaning Header Buffer array + sortBuf[i] = 0xFF; + } + + for(i = 0; i < sizeof(res); i++){ + byte fontNumber; + char ch; + ch = res[i]; + for(y = 0; y < 5; y++){ + for(x = 0; x < 4; x++){ + //pxSkip = HORIZONTALOFFSET + VERSTICALOFFSET + (BITSPERWORD * i); + //pxSkip = 16 + (320 * (y + 3)) + (4 * 2 * i) + (2 * x); Width: x2 + pxSkip = 16 + (320 * (y + 3)) + (4 * i) + x; + + // If ch is pair mask is: 11110000, if no 00001111 + uint8_t sl = (ch % 2)? 3 : 7 ; + uint8_t mask = pow(2, sl - x); + + if(ch >= 48 && ch <=91){ + fontNumber = (ch-48)/2; + } + else { + fontNumber = 22; + } + + if((l_fonts[fontNumber][y] & mask) != 0){ + for(j = 0; j < 3; j++){ + sortBuf[(3 * pxSkip) + j] = 0x00; + } + } + } + } + } + + for(k = 0; k < 10560; k++){ // Adding header to the binary file + dst->write(sortBuf[k]); + } +} + +*/ + +void rotate_image(char *file_input, char *file_output, char *telemetry) { + + File input_file = LittleFS.open(file_input, "r"); + + char pixel[3]; + int side = (320 - 240)/2; + for (int y = 0; y < 240; y++) { + for (int x = 0; x < 320; x++) { + input_file.readBytes(pixel, sizeof(pixel)); + if (( x >= side) && (x < (320 - side))) { + input_buffer[y][x - side][0] = pixel[0]; + input_buffer[y][x - side][1] = pixel[1]; + input_buffer[y][x - side][2] = pixel[2]; + } + } + } + input_file.close(); + + LittleFS.remove(file_input); + + Serial.println("Input file read and deleted"); + Serial.println(side); + + input_file = LittleFS.open(file_input, "w+"); + + //writeFooter(&input_file, telemetry); + + char side_pixel[] = { 0xff, 0xff, 0xff }; + for (int y = 0; y < 240; y++) { + Serial.println(" "); + for (int x = 0; x < 320; x++) { + if (( x >= side) && (x < (320 - side))) { + Serial.print("+"); +// Serial.print(x - side); +// Serial.print(" "); + pixel[0] = input_buffer[x - side][y][0]; + pixel[1] = input_buffer[x - side][y][1]; + pixel[2] = input_buffer[x - side][y][2]; + if (input_file.write(pixel, sizeof(pixel)) < 3) + Serial.println("Error writing to file"); + } else { + Serial.print("-"); + if (input_file.write(side_pixel, sizeof(side_pixel)) < 3) + Serial.println("Error writing to file"); + } + } + } + + input_file.close(); +} From 506eb47db8866661e562479354750d1448782667 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:14:26 -0400 Subject: [PATCH 08/32] removed LittleFS --- .../esp32-cam-send-jpeg-serial.ino | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 860894ee..48e71b35 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -686,7 +686,7 @@ void jpeg_decode(char* filename, char* fileout, bool debug){ // Open the file for writing // File imgFile = SD.open(fileout, FILE_WRITE); - outFile = LittleFS.open(fileout, "w+"); + outFile = SPIFFS.open(fileout, "w+"); if (outFile) { if (debug) @@ -751,7 +751,7 @@ void jpeg_decode(char* filename, char* fileout, bool debug){ uint16_t w = 0, h = 0; // TJpgDec.getFsJpgSize(&w, &h, "/cam.jpg", LittleFS); // Note name preceded with "/" - TJpgDec.getFsJpgSize(&w, &h, filename, LittleFS); // Note name preceded with "/" + TJpgDec.getFsJpgSize(&w, &h, filename, SPIFFS); // Note name preceded with "/" if (debug) { Serial.print("Width = "); @@ -772,7 +772,7 @@ void jpeg_decode(char* filename, char* fileout, bool debug){ // TJpgDec.setCallback(get_block); TJpgDec.setCallback(merged_get_block); //TJpgDec.drawFsJpg(0, 0, "/cam.jpg", LittleFS); - TJpgDec.drawFsJpg(0, 0, filename, LittleFS); + TJpgDec.drawFsJpg(0, 0, filename, SPIFFS); if (debug) Serial.println("Draw complete"); @@ -973,7 +973,7 @@ void writeFooter(File* dst){ void raw_decode(char* filename, char* fileout){ // used to decode .raw files in RGB565 format // Open the input file for reading - inFile = LittleFS.open(filename, "r"); + inFile = SPIFFS.open(filename, "r"); if (inFile) Serial.println("Input opened"); @@ -982,7 +982,7 @@ void raw_decode(char* filename, char* fileout){ // used to decode .raw files in return; } // Open the output file for writing - outFile = LittleFS.open(fileout, "w+"); + outFile = SPIFFS.open(fileout, "w+"); if (outFile) Serial.println("Output opened"); @@ -1133,7 +1133,7 @@ void writeFooter(File* dst, char *telemetry){ void rotate_image(char *file_input, char *file_output, char *telemetry) { - File input_file = LittleFS.open(file_input, "r"); + File input_file = SPIFFS.open(file_input, "r"); char pixel[3]; int side = (320 - 240)/2; @@ -1149,12 +1149,12 @@ void rotate_image(char *file_input, char *file_output, char *telemetry) { } input_file.close(); - LittleFS.remove(file_input); + SPIFFS.remove(file_input); Serial.println("Input file read and deleted"); Serial.println(side); - input_file = LittleFS.open(file_input, "w+"); + input_file = SPIFFS.open(file_input, "w+"); //writeFooter(&input_file, telemetry); From 0afe24541fe10081d5166ff623ac87ad0366c0da Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:18:52 -0400 Subject: [PATCH 09/32] added LittleFS for compile error --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 48e71b35..564d5ccb 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -25,6 +25,7 @@ #include #include "FS.h" #include "SPIFFS.h" +#include #include // some info: https://visualgdb.com/tutorials/esp32/camera/ From 894cdff38e4f46a8820ccf77f6133fbc46d27af2 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:22:51 -0400 Subject: [PATCH 10/32] removed LittleFS, try changing TJpg user config file to enable SD --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 1 - 1 file changed, 1 deletion(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 564d5ccb..48e71b35 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -25,7 +25,6 @@ #include #include "FS.h" #include "SPIFFS.h" -#include #include // some info: https://visualgdb.com/tutorials/esp32/camera/ From 59bf48fe01afab0a2b741f5ed8ce42b19c2da335 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:29:22 -0400 Subject: [PATCH 11/32] added outfIle and inFile --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 48e71b35..06ca3b44 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -50,6 +50,8 @@ char file_buf[50000]; int file_len; bool file_flag = false; camera_fb_t *pic; +File inFile; +File outFile; // example code from https://github.com/espressif/arduino-esp32/blob/master/libraries/LittleFS/examples/LITTLEFS_test/LITTLEFS_test.ino // From e48301b56d64c190d8f2e9fb4e47c79cba1a357a Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:32:36 -0400 Subject: [PATCH 12/32] added variables --- .../esp32-cam-send-jpeg-serial.ino | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 06ca3b44..97273f03 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -32,6 +32,81 @@ //#define DEBUG #define FORMAT_SPIFFS_IF_FAILED true +//FONTS +const uint8_t b_fonts[43][11] = { + {0x00, 0x18, 0x24, 0x62, 0x62, 0x62, 0x7E, 0x62, 0x62, 0x62, 0x00}, //00: A + {0x00, 0x7C, 0x32, 0x32, 0x32, 0x3C, 0x32, 0x32, 0x32, 0x7C, 0x00}, //01: B + {0x00, 0x3C, 0x62, 0x62, 0x60, 0x60, 0x60, 0x62, 0x62, 0x3C, 0x00}, //02: C + {0x00, 0x7C, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x7C, 0x00}, //03: D + {0x00, 0x7E, 0x60, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x7E, 0x00}, //04: E + {0x00, 0x7E, 0x60, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x60, 0x00}, //05: F + {0x00, 0x3C, 0x62, 0x62, 0x60, 0x60, 0x66, 0x62, 0x62, 0x3C, 0x00}, //06: G + {0x00, 0x62, 0x62, 0x62, 0x62, 0x7E, 0x62, 0x62, 0x62, 0x62, 0x00}, //07: H + {0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, //08: I + {0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x4C, 0x4C, 0x4C, 0x38, 0x00}, //09: J + {0x00, 0x62, 0x64, 0x68, 0x70, 0x68, 0x64, 0x62, 0x62, 0x62, 0x00}, //10: K + {0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00}, //11: L + {0x00, 0x42, 0x62, 0x76, 0x6A, 0x62, 0x62, 0x62, 0x62, 0x62, 0x00}, //12: M + {0x00, 0x42, 0x62, 0x72, 0x6A, 0x66, 0x62, 0x62, 0x62, 0x62, 0x00}, //13: N + {0x00, 0x3C, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x3C, 0x00}, //14: O + {0x00, 0x7C, 0x62, 0x62, 0x62, 0x7C, 0x60, 0x60, 0x60, 0x60, 0x00}, //15: P + {0x00, 0x3C, 0x62, 0x62, 0x62, 0x62, 0x62, 0x6A, 0x6A, 0x3C, 0x08}, //16: Q + {0x00, 0x7C, 0x62, 0x62, 0x62, 0x7C, 0x68, 0x64, 0x62, 0x62, 0x00}, //17: R + {0x00, 0x3C, 0x62, 0x60, 0x60, 0x3C, 0x06, 0x06, 0x46, 0x3C, 0x00}, //18: S + {0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, //19: T + {0x00, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x3C, 0x00}, //20: U + {0x00, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x22, 0x14, 0x08, 0x00}, //21: V + {0x00, 0x62, 0x62, 0x62, 0x62, 0x62, 0x6A, 0x76, 0x62, 0x42, 0x00}, //22: W + {0x00, 0x42, 0x62, 0x74, 0x38, 0x1C, 0x2E, 0x46, 0x42, 0x42, 0x00}, //23: X + {0x00, 0x42, 0x62, 0x74, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, //24: Y + {0x00, 0x7E, 0x06, 0x0E, 0x0C, 0x18, 0x30, 0x70, 0x60, 0x7E, 0x00}, //25: Z + {0x00, 0x3C, 0x62, 0x62, 0x66, 0x6A, 0x72, 0x62, 0x62, 0x3C, 0x00}, //26: 0 + {0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, //27: 1 + {0x00, 0x3C, 0x46, 0x06, 0x06, 0x1C, 0x20, 0x60, 0x60, 0x7E, 0x00}, //28: 2 + {0x00, 0x3C, 0x46, 0x06, 0x06, 0x1C, 0x06, 0x06, 0x46, 0x3C, 0x00}, //29: 3 + {0x00, 0x0C, 0x1C, 0x2C, 0x4C, 0x4C, 0x7E, 0x0C, 0x0C, 0x0C, 0x00}, //30: 4 + {0x00, 0x7E, 0x60, 0x60, 0x60, 0x7C, 0x06, 0x06, 0x46, 0x3C, 0x00}, //31: 5 + {0x00, 0x3C, 0x62, 0x60, 0x60, 0x7C, 0x62, 0x62, 0x62, 0x3C, 0x00}, //32: 6 + {0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00}, //33: 7 + {0x00, 0x3C, 0x62, 0x62, 0x62, 0x3C, 0x62, 0x62, 0x62, 0x3C, 0x00}, //34: 8 + {0x00, 0x3C, 0x46, 0x46, 0x46, 0x3E, 0x06, 0x06, 0x46, 0x3C, 0x00}, //35: 9 + {0x00, 0x00, 0x02, 0x06, 0x0E, 0x1C, 0x38, 0x70, 0x60, 0x40, 0x00}, //36: / + {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00}, //37: - + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00}, //38: . + {0x00, 0x3C, 0x46, 0x06, 0x06, 0x0C, 0x10, 0x00, 0x30, 0x30, 0x00}, //39: ? + {0x00, 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x00, 0x18, 0x18, 0x00}, //40: ! + {0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00}, //41: : + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} //42: space +}; + +// Nibble font table +const uint8_t l_fonts[23][5] = { + { 0xE2, 0xA6, 0xA2, 0xA2, 0xE2 }, // 0: 01 + { 0xEE, 0x22, 0xE6, 0x82, 0xEE }, // 1: 23 + { 0xAE, 0xA8, 0xEE, 0x22, 0x2E }, // 2: 45 + { 0x8E, 0x82, 0xE2, 0xA2, 0xE2 }, // 3: 67 + { 0xEE, 0xAA, 0xEE, 0xA2, 0xE2 }, // 4: 89 + { 0x00, 0x22, 0x00, 0x22, 0x04 }, // 5: :; + { 0x20, 0x4E, 0x80, 0x4E, 0x20 }, // 6: <= + { 0x8E, 0x42, 0x26, 0x40, 0x84 }, // 7: >? + { 0x64, 0x9A, 0xBE, 0x8A, 0x7A }, // 8: @A + { 0xC6, 0xA8, 0xC8, 0xA8, 0xC6 }, // 9: BC + { 0xCE, 0xA8, 0xAC, 0xA8, 0xCE }, // 10: DE + { 0xE6, 0x88, 0xCE, 0x8A, 0x86 }, // 11: FG + { 0xA4, 0xA4, 0xE4, 0xA4, 0xA4 }, // 12: HI + { 0x69, 0x2A, 0x2C, 0x2A, 0x49 }, // 13: JK + { 0x8A, 0x8E, 0x8E, 0x8A, 0xEA }, // 14: LM + { 0x04, 0x9A, 0xDA, 0xBA, 0x94 }, // 15: NO + { 0xC4, 0xAA, 0xCA, 0x8E, 0x86 }, // 16: PQ + { 0xC6, 0xA8, 0xC4, 0xA2, 0xAC }, // 17: RS + { 0xE0, 0x4A, 0x4A, 0x4A, 0x44 }, // 18: TU + { 0x09, 0xA9, 0xA9, 0x6F, 0x26 }, // 19: vW (sort of..) + { 0x0A, 0xAA, 0x46, 0xA2, 0x04 }, // 20: XY + { 0xE6, 0x24, 0x44, 0x84, 0xE6 }, // 21: Z[ + { 0x00, 0x00, 0x00, 0x00, 0x00 } // 22: SPACE +}; + + void app_main(); void send_image_serial(char *filename); void save_camera_image(char* filename); @@ -52,6 +127,9 @@ bool file_flag = false; camera_fb_t *pic; File inFile; File outFile; +int blocks = 0; +//int counter = 0; +bool write_complete = false; // example code from https://github.com/espressif/arduino-esp32/blob/master/libraries/LittleFS/examples/LITTLEFS_test/LITTLEFS_test.ino // From aea5795f0b2434f339d17798ea64342e43820d30 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:36:49 -0400 Subject: [PATCH 13/32] removed text at the start --- .../esp32-cam-send-jpeg-serial.ino | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 97273f03..9852e806 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -774,7 +774,8 @@ void jpeg_decode(char* filename, char* fileout, bool debug){ } else Serial.println("Failed to open output"); - + + /* for(i = 0; i < 15360; i++){ // Cleaning Header Buffer array sortBuf[i] = 0xFF; } @@ -818,7 +819,8 @@ void jpeg_decode(char* filename, char* fileout, bool debug){ // imgFile.write(sortBuf[k]); // } outFile.write(sortBuf, sizeof(sortBuf)); - +*/ + // writeFooter(&outFile); //Writing first 10560 bytes (11*320*3) // write footer after rotate // Decoding start From 1f47e189b55876aee1304fb87cbbb4211233f1c8 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 10:38:38 -0400 Subject: [PATCH 14/32] try removing FS.h --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 9852e806..df1074d0 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -23,7 +23,7 @@ #include #include "esp_camera.h" #include -#include "FS.h" +//#include "FS.h" #include "SPIFFS.h" #include From 7a2451e4b54ef5a0b8c1711b4be3d2a300f088a3 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 11:26:28 -0400 Subject: [PATCH 15/32] added const uint8_t* --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index df1074d0..e4c00d0b 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -646,7 +646,7 @@ bool get_block(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) if (x == 304) { if (outFile) { Serial.println("********************************************* Writing block!"); - outFile.write(&img_block[0][0][0], sizeof(img_block)); + outFile.write((const uint8_t*)&img_block[0][0][0], sizeof(img_block)); } else Serial.println("Problem writing block"); counter = 0; From e163763a47eb0933699412b46dbf33c04dbf5a77 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 11:29:59 -0400 Subject: [PATCH 16/32] fixed rest, added input_buffer --- .../esp32-cam-send-jpeg-serial.ino | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index e4c00d0b..6818a09c 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -106,6 +106,7 @@ const uint8_t l_fonts[23][5] = { { 0x00, 0x00, 0x00, 0x00, 0x00 } // 22: SPACE }; +char input_buffer[240][240][3]; void app_main(); void send_image_serial(char *filename); @@ -1141,7 +1142,7 @@ void raw_decode(char* filename, char* fileout){ // used to decode .raw files in } */ - int bytes = outFile.write(buffer, 3); + int bytes = outFile.write((const uint8_t*)buffer, 3); // Serial.println(bytes); if (bytes < 3) Serial.println("Error writing output file"); @@ -1251,11 +1252,11 @@ void rotate_image(char *file_input, char *file_output, char *telemetry) { pixel[0] = input_buffer[x - side][y][0]; pixel[1] = input_buffer[x - side][y][1]; pixel[2] = input_buffer[x - side][y][2]; - if (input_file.write(pixel, sizeof(pixel)) < 3) + if (input_file.write((const uint8_t*)pixel, sizeof(pixel)) < 3) Serial.println("Error writing to file"); } else { Serial.print("-"); - if (input_file.write(side_pixel, sizeof(side_pixel)) < 3) + if (input_file.write((const uint8_t*)side_pixel, sizeof(side_pixel)) < 3) Serial.println("Error writing to file"); } } From b07af3a1a07b03d2c5256cd43ce677e6a47425ed Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 15:39:18 -0400 Subject: [PATCH 17/32] removed sstv2.h --- cubesatsim/cubesatsim.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 5e566df4..33a3e6a4 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -44,7 +44,7 @@ // jpg files to be stored in flash storage on Pico (FS 512kB setting) #include "sstv1.h" -#include "sstv2.h" +//#include "sstv2.h" Adafruit_INA219 ina219_1_0x40; Adafruit_INA219 ina219_1_0x41(0x41); @@ -217,7 +217,7 @@ void loop() { char camera_file[] = "/cam.jpg"; strcpy(image_file, camera_file); } else - strcpy(image_file, sstv2_filename); // 2nd stored image + strcpy(image_file, sstv1_filename); // 2nd stored image } if (debug_mode) { Serial.print("\nSending SSTV image "); From 0e511c526a538df17fddc8f47a4f145cbf96b4d3 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 15:40:57 -0400 Subject: [PATCH 18/32] fully removed sstv image 2 --- cubesatsim/cubesatsim.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 33a3e6a4..bb0eedb6 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -3838,7 +3838,7 @@ void load_files() { } f.close(); } - +/* f = LittleFS.open("sstv_image_2_320_x_240.jpg", "r"); if (f) { Serial.println("Image sstv_image_2_320_x_240.jpg already in FS"); @@ -3852,7 +3852,7 @@ void load_files() { } f.close(); } - +*/ show_dir(); } From 546760144b0c4067e55d073dbebd53c8b53e2a15 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 16:57:44 -0400 Subject: [PATCH 19/32] rotate_image files must be different, cam2.bin and cam.bin --- cubesatsim/cubesatsim.ino | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index bb0eedb6..98671948 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -227,10 +227,11 @@ void loop() { // send_sstv(image_file); - char output_file[] = "/cam.bin"; - jpeg_decode(image_file, output_file, debug_mode); + char output_file2[] = "/cam2.bin"; + jpeg_decode(image_file, output_file2, debug_mode); char telem_display[] = " Battery: Status: "; - rotate_image(output_file, output_file, telem_display); + char output_file[] = "/cam.bin"; + rotate_image(output_file2, output_file, telem_display); if (debug_mode) Serial.println("Start transmit!!!"); From 091f6fc58fab7289cf211d4aceb65c0f3db2779a Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 22:11:17 -0400 Subject: [PATCH 20/32] Update cubesatsim.ino --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 98671948..436b2d03 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -228,7 +228,7 @@ void loop() { // send_sstv(image_file); char output_file2[] = "/cam2.bin"; - jpeg_decode(image_file, output_file2, debug_mode); + jpeg_decode(image_file, output_file2, true); // debug_mode); char telem_display[] = " Battery: Status: "; char output_file[] = "/cam.bin"; rotate_image(output_file2, output_file, telem_display); From 51eb3f13017829761acd9074e3ee170d395c68b4 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 22:21:21 -0400 Subject: [PATCH 21/32] dir --- cubesatsim/cubesatsim.ino | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 436b2d03..91ab7eba 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -227,12 +227,15 @@ void loop() { // send_sstv(image_file); + show_dir(); char output_file2[] = "/cam2.bin"; jpeg_decode(image_file, output_file2, true); // debug_mode); + show_dir(); char telem_display[] = " Battery: Status: "; char output_file[] = "/cam.bin"; rotate_image(output_file2, output_file, telem_display); - + show_dir(); + if (debug_mode) Serial.println("Start transmit!!!"); digitalWrite(PTT_PIN, LOW); // start transmit From bf922baa7c9d8752c72017a9c6b059c67ecfeea6 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 22:28:35 -0400 Subject: [PATCH 22/32] delete cam.bin --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 91ab7eba..049ddffd 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -226,7 +226,7 @@ void loop() { // send_sstv("/cam.raw"); // send_sstv(image_file); - + LittleFS.remove("/cam.bin"); show_dir(); char output_file2[] = "/cam2.bin"; jpeg_decode(image_file, output_file2, true); // debug_mode); From 75e308d47520f73bf793ef00e4cfcf0f6e94f59d Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Mon, 5 Sep 2022 22:37:07 -0400 Subject: [PATCH 23/32] don't delete cam.bin --- cubesatsim/cubesatsim.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 049ddffd..a83babb7 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -226,7 +226,7 @@ void loop() { // send_sstv("/cam.raw"); // send_sstv(image_file); - LittleFS.remove("/cam.bin"); +// LittleFS.remove("/cam.bin"); show_dir(); char output_file2[] = "/cam2.bin"; jpeg_decode(image_file, output_file2, true); // debug_mode); From 74986c322c72a322389e9f696e7266e1fa5055ea Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Tue, 6 Sep 2022 09:43:01 -0400 Subject: [PATCH 24/32] added PD High and PTT low to program_radio --- cubesatsim/cubesatsim.ino | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index a83babb7..703ef5e0 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -4231,6 +4231,9 @@ void set_lat_lon() { void program_radio() { + digitalWrite(PD_PIN, HIGH); // enable SR_FRS + digitalWrite(PTT_PIN, HIGH); // stop transmit + DumbTXSWS mySerial(SWTX_PIN); // TX pin mySerial.begin(9600); From 98d2a98b1f4994624475364afea8c26619efc3ef Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Tue, 6 Sep 2022 09:47:34 -0400 Subject: [PATCH 25/32] force no camera --- cubesatsim/cubesatsim.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 703ef5e0..464da019 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -139,7 +139,8 @@ void setup() { start_button_isr(); setup_sstv(); - if (start_camera()) { +// if (start_camera()) { + if (false) { camera_detected = true; Serial.println("Camera detected!"); } else { From 068907fe28b7484eb38fd5b2a89d3259f4fb5dbc Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Tue, 6 Sep 2022 11:33:14 -0400 Subject: [PATCH 26/32] PTT off, telem display upper case only --- cubesatsim/cubesatsim.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 464da019..f6889c50 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -232,8 +232,9 @@ void loop() { char output_file2[] = "/cam2.bin"; jpeg_decode(image_file, output_file2, true); // debug_mode); show_dir(); - char telem_display[] = " Battery: Status: "; - char output_file[] = "/cam.bin"; + char telem_display[] = " BATT: STATUS: TEMP: "; + char output_file[] = "/cam.bin"; + digitalWrite(PTT_PIN, HIGH); // shouldn't need this but rotate_image(output_file2, output_file, telem_display); show_dir(); From 63daa1f540f90a1a0f6905b051bac42b32f2b783 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Tue, 6 Sep 2022 16:33:21 -0400 Subject: [PATCH 27/32] allow camera detection --- cubesatsim/cubesatsim.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index f6889c50..4eb0d0d3 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -139,8 +139,8 @@ void setup() { start_button_isr(); setup_sstv(); -// if (start_camera()) { - if (false) { + if (start_camera()) { +// if (false) { camera_detected = true; Serial.println("Camera detected!"); } else { From 354c7304fc3225eb6f25fe87857d6092eec4a900 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Tue, 6 Sep 2022 21:24:20 -0400 Subject: [PATCH 28/32] added config_camera with horizontal and vertical flip --- .../esp32-cam-send-jpeg-serial.ino | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 6818a09c..15fc9d5f 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -181,6 +181,8 @@ void setup() { Serial.begin(112500); initialize_camera(); + + config_camera(); Serial.println("ESP32-CAM Camera initialized"); @@ -316,9 +318,22 @@ static esp_err_t init_camera() // ESP_LOGE(TAG, "Camera Init Failed"); return err; } + + return ESP_OK; } +void config_camera() { + + sensor_t * s = esp_camera_sensor_get(); + + s->set_brightness(s, 2); // -2 to 2 +// s->set_contrast(s, 0); // -2 to 2 + s->set_saturation(s, 1); // -2 to 2 + s->set_hmirror(s, 1); // 0 = disable , 1 = enable + s->set_vflip(s, 1); +} + void initialize_camera() { if (ESP_OK != init_camera()) { Serial.println("Failed to initialize camera!"); From 31b500cc9213802712cf59a3f208cd8708267056 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Wed, 7 Sep 2022 15:12:20 -0400 Subject: [PATCH 29/32] remove config_camera --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 15fc9d5f..187fc0f4 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -178,11 +178,11 @@ void setup() { delay(5000); - Serial.begin(112500); + Serial.begin(115200); initialize_camera(); - config_camera(); +// config_camera(); Serial.println("ESP32-CAM Camera initialized"); From ca4e3798a4c6195fa8e475fc91e938035ae17977 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Wed, 7 Sep 2022 15:14:34 -0400 Subject: [PATCH 30/32] only h and v flip --- .../esp32-cam-send-jpeg-serial.ino | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 187fc0f4..e2ddfb65 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -182,7 +182,7 @@ void setup() { initialize_camera(); -// config_camera(); + config_camera(); Serial.println("ESP32-CAM Camera initialized"); @@ -327,9 +327,9 @@ void config_camera() { sensor_t * s = esp_camera_sensor_get(); - s->set_brightness(s, 2); // -2 to 2 +// s->set_brightness(s, 2); // -2 to 2 // s->set_contrast(s, 0); // -2 to 2 - s->set_saturation(s, 1); // -2 to 2 +// s->set_saturation(s, 1); // -2 to 2 s->set_hmirror(s, 1); // 0 = disable , 1 = enable s->set_vflip(s, 1); } From 08c5548121aad9b5c55745b5b9b77c3f2027da17 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Wed, 7 Sep 2022 15:19:40 -0400 Subject: [PATCH 31/32] just vertical flip --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index e2ddfb65..79b33663 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -330,7 +330,7 @@ void config_camera() { // s->set_brightness(s, 2); // -2 to 2 // s->set_contrast(s, 0); // -2 to 2 // s->set_saturation(s, 1); // -2 to 2 - s->set_hmirror(s, 1); // 0 = disable , 1 = enable +// s->set_hmirror(s, 1); // 0 = disable , 1 = enable s->set_vflip(s, 1); } From 5d7f54c4cf1d682fd10fa74d2f8243ad832adcb2 Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Wed, 7 Sep 2022 15:26:09 -0400 Subject: [PATCH 32/32] just mirror --- .../esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino index 79b33663..fcb62e9d 100644 --- a/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino +++ b/cubesatsim/esp32-cam-send-jpeg-serial/esp32-cam-send-jpeg-serial.ino @@ -330,8 +330,8 @@ void config_camera() { // s->set_brightness(s, 2); // -2 to 2 // s->set_contrast(s, 0); // -2 to 2 // s->set_saturation(s, 1); // -2 to 2 -// s->set_hmirror(s, 1); // 0 = disable , 1 = enable - s->set_vflip(s, 1); + s->set_hmirror(s, 1); // 0 = disable , 1 = enable +// s->set_vflip(s, 1); } void initialize_camera() {