Fix broken enqueue_P
This commit is contained in:
		| @@ -423,14 +423,14 @@ void startOrResumeJob() { | ||||
|  | ||||
|       #if HAS_RESUME_CONTINUE                   // Display "Click to Continue..." | ||||
|         case 1:                                 // 30 min timeout with LCD, 1 min without | ||||
|           did_state = queue.enqueue_P(PSTR("M0Q1S" TERN(HAS_LCD_MENU, "1800", "60"))); | ||||
|           did_state = queue.enqueue_one_P(PSTR("M0Q1S" TERN(HAS_LCD_MENU, "1800", "60"))); | ||||
|           break; | ||||
|       #endif | ||||
|  | ||||
|       case 2: print_job_timer.stop(); break; | ||||
|  | ||||
|       case 3: | ||||
|         did_state = print_job_timer.duration() < 60 || queue.enqueue_P(PSTR("M31")); | ||||
|         did_state = print_job_timer.duration() < 60 || queue.enqueue_one_P(PSTR("M31")); | ||||
|         break; | ||||
|  | ||||
|       case 4: | ||||
|   | ||||
| @@ -209,6 +209,21 @@ void GCodeQueue::inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; } | ||||
|  */ | ||||
| void GCodeQueue::enqueue_one_now(const char* cmd) { while (!enqueue_one(cmd)) idle(); } | ||||
|  | ||||
| /** | ||||
|  * Attempt to enqueue a single G-code command | ||||
|  * and return 'true' if successful. | ||||
|  */ | ||||
| bool GCodeQueue::enqueue_one_P(PGM_P const pgcode) { | ||||
|   size_t i = 0; | ||||
|   PGM_P p = pgcode; | ||||
|   char c; | ||||
|   while ((c = pgm_read_byte(&p[i])) && c != '\n') i++; | ||||
|   char cmd[i + 1]; | ||||
|   memcpy_P(cmd, p, i); | ||||
|   cmd[i] = '\0'; | ||||
|   return _enqueue(cmd); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Enqueue from program memory and return only when commands are actually enqueued | ||||
|  * Never call this from a G-code handler! | ||||
|   | ||||
| @@ -77,6 +77,12 @@ public: | ||||
|    */ | ||||
|   static void enqueue_one_now(const char* cmd); | ||||
|  | ||||
|   /** | ||||
|    * Attempt to enqueue a single G-code command | ||||
|    * and return 'true' if successful. | ||||
|    */ | ||||
|   static bool enqueue_one_P(PGM_P const pgcode); | ||||
|  | ||||
|   /** | ||||
|    * Enqueue from program memory and return only when commands are actually enqueued | ||||
|    */ | ||||
| @@ -117,12 +123,6 @@ public: | ||||
|    */ | ||||
|   static void flush_and_request_resend(); | ||||
|  | ||||
|   /** | ||||
|    * Attempt to enqueue a single G-code command | ||||
|    * and return 'true' if successful. | ||||
|    */ | ||||
|   FORCE_INLINE static bool enqueue_P(const char* cmd) { return _enqueue(cmd); } | ||||
|  | ||||
| private: | ||||
|  | ||||
|   static uint8_t index_w;  // Ring buffer write position | ||||
|   | ||||
		Reference in New Issue
	
	Block a user