Przeglądaj źródła

Added back communication to keyboard

Per Mårtensson 3 lat temu
rodzic
commit
742d67c86a

+ 3 - 2
sw/key800/include/abc800_config.h

@@ -11,7 +11,7 @@
 
 
 // Serial port settings
 // Serial port settings
 #define KEY800_SERIAL_BAUD_RATE 115200
 #define KEY800_SERIAL_BAUD_RATE 115200
-
+#define KEY800_SERIALKETBOARD_BAUD_RATE 625
 
 
 //Logging
 //Logging
 #define KEY800_LOGGING_ENABLE_SERIAL
 #define KEY800_LOGGING_ENABLE_SERIAL
@@ -49,7 +49,8 @@
 
 
 #define ABC800_KEY_IN_ABC800				0x00
 #define ABC800_KEY_IN_ABC800				0x00
 #define ABC800_KEY_RESET					0x01
 #define ABC800_KEY_RESET					0x01
-#define ABC800_KEY_DELAY_LEGACY			4
+#define ABC800_KEY_KD						0x02
+#define ABC800_KEY_DELAY_LEGACY				50
 #define ABC800_KEY_DELAY					4		
 #define ABC800_KEY_DELAY					4		
 
 
 #define ABC800_KEY_SPIFFS_PATH			"/"
 #define ABC800_KEY_SPIFFS_PATH			"/"

+ 2 - 2
sw/key800/include/abc800_gpio.h

@@ -4,8 +4,8 @@
 
 
 #define K800_RST            2
 #define K800_RST            2
 #define K800_KD             3
 #define K800_KD             3
-#define K800_TXD            8
-#define K800_RXD            6
+#define K800_TXD            6
+#define K800_RXD            8
 #define K800_TRXC           9
 #define K800_TRXC           9
 
 
 #define A800_RST            34
 #define A800_RST            34

+ 10 - 16
sw/key800/src/abc800_gpio.cpp

@@ -14,7 +14,15 @@ namespace abc800 {
         }
         }
         portEXIT_CRITICAL(&sync_isr);
         portEXIT_CRITICAL(&sync_isr);
     } 
     } 
-
+    void IRAM_ATTR abc800keybord_kd_isr(){
+        portENTER_CRITICAL(&sync_isr);
+        Serial.println("x");
+        if (!xTaskNotifyFromISR(Keyboard_ABC800_Task_In, ABC800_KEY_KD, eSetValueWithoutOverwrite,NULL))
+        {
+            ESP_LOGE(TAG,"Could not notify task");
+        }
+        portEXIT_CRITICAL(&sync_isr);
+    } 
 	void gpio::init(){
 	void gpio::init(){
         uint8_t i;
         uint8_t i;
         pinMode(KEY800_LED,OUTPUT);
         pinMode(KEY800_LED,OUTPUT);
@@ -32,6 +40,7 @@ namespace abc800 {
         
         
         //Serial2.begin(650,SERIAL_8N2,A800_RXD,A800_TXD);
         //Serial2.begin(650,SERIAL_8N2,A800_RXD,A800_TXD);
         attachInterrupt(K800_RST,abc800keybord_rst_isr,CHANGE);
         attachInterrupt(K800_RST,abc800keybord_rst_isr,CHANGE);
+        attachInterrupt(K800_KD,abc800keybord_kd_isr,CHANGE);
 
 
     }
     }
     uint8_t gpio::sendkey(uint8_t key){
     uint8_t gpio::sendkey(uint8_t key){
@@ -49,21 +58,6 @@ namespace abc800 {
     }
     }
     uint8_t gpio::abc800_getkey(){
     uint8_t gpio::abc800_getkey(){
         uint8_t key=0;
         uint8_t key=0;
-        /*
-        key =  digitalRead(A80IN_3);
-        key = key << 1;
-        key = key | digitalRead(A80IN_2);
-        key = key << 1;
-        key = key | digitalRead(A80IN_1);
-        key = key << 1;
-        key = key | digitalRead(A80IN_7);
-        key = key << 1;
-        key = key | digitalRead(A80IN_6);
-        key = key << 1;
-        key = key | digitalRead(A80IN_5);
-        key = key << 1;
-        key = key | digitalRead(A80IN_4);
-        */
         return key;
         return key;
     }
     }
 
 

+ 38 - 16
sw/key800/src/abc800_keyboard.cpp

@@ -15,7 +15,7 @@ extern abc800::keyboard abc800_keyboard;
 extern TimerHandle_t abc800_repeat_delay_timer;
 extern TimerHandle_t abc800_repeat_delay_timer;
 extern TimerHandle_t abc800_repeat_timer;
 extern TimerHandle_t abc800_repeat_timer;
 extern TimerHandle_t abc800_check_timer;
 extern TimerHandle_t abc800_check_timer;
-
+extern SoftwareSerial abc800_serial_keyboard;
 void  onRepeatTimer_abc800_in(TimerHandle_t xTimer) {
 void  onRepeatTimer_abc800_in(TimerHandle_t xTimer) {
   abc800_keyboard.repeat_abc800_key();
   abc800_keyboard.repeat_abc800_key();
   xTimerStart(abc800_repeat_timer, portMAX_DELAY);
   xTimerStart(abc800_repeat_timer, portMAX_DELAY);
@@ -42,8 +42,6 @@ namespace abc800
                     abc800_gpio.sendkey(abc800_keyboard.getABC800Keycode(key)); 
                     abc800_gpio.sendkey(abc800_keyboard.getABC800Keycode(key)); 
                 }
                 }
                 vTaskDelay((key.ascii == 0x13 ? 100 : 4) / portTICK_PERIOD_MS);
                 vTaskDelay((key.ascii == 0x13 ? 100 : 4) / portTICK_PERIOD_MS);
-            }else{
-                vTaskDelay(1 / portTICK_PERIOD_MS);
             }
             }
         }
         }
     }
     }
@@ -57,36 +55,58 @@ namespace abc800
             uint32_t keyboard_action = 0;
             uint32_t keyboard_action = 0;
             if (xTaskNotifyWait(0, ULONG_MAX, &keyboard_action , 5)  == pdPASS) {
             if (xTaskNotifyWait(0, ULONG_MAX, &keyboard_action , 5)  == pdPASS) {
 
 
-                if (keyboard_action == ABC800_KEY_IN_ABC800)
+
+                if (keyboard_action == ABC800_KEY_RESET)
+                {
+                    ESP_LOGI(TAG,"RESET");
+                    digitalWrite(A800_RST,LOW);
+                    delay(200);
+                    digitalWrite(A800_RST,HIGH);
+
+                }
+
+                if (keyboard_action == ABC800_KEY_KD)
                 {
                 {
+                    ESP_LOGI(TAG,"KD INT");
+                    xTimerStop(abc800_repeat_delay_timer, portMAX_DELAY);
+                    xTimerStop(abc800_repeat_timer, portMAX_DELAY);
+                    xTimerStop(abc800_check_timer, portMAX_DELAY);
+
+                }
+
+            } 
+            if (Serial1.available())
+            {
+                int code = Serial1.read();
+                ESP_LOGI(TAG,"BACK from computer %i",code);
+                abc800_serial_keyboard.write(code);
+            }
+                if (abc800_serial_keyboard.available() > 0)
+                {
+                    ESP_LOGI(TAG,"KEY IN");
                     if (abc800_gpio.abc800_getupdown()){
                     if (abc800_gpio.abc800_getupdown()){
-                        uint8_t key = abc800_gpio.abc800_getkey();
+                        uint8_t key = abc800_serial_keyboard.read();
                         key800queue ascii = abc800_keyboard.getKeyboardKeycode(key);
                         key800queue ascii = abc800_keyboard.getKeyboardKeycode(key);
                         abc800_keyboard.abc800_old_key = key;
                         abc800_keyboard.abc800_old_key = key;
                         if (xQueueSend(abc800_key_queue_out, (void *)&ascii, 0) != pdTRUE) {
                         if (xQueueSend(abc800_key_queue_out, (void *)&ascii, 0) != pdTRUE) {
                             ESP_LOGE(TAG,"Queue full");
                             ESP_LOGE(TAG,"Queue full");
                         }
                         }
+                        /*
                         xTimerStop(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_timer, portMAX_DELAY);
                         xTimerStop(abc800_check_timer, portMAX_DELAY);
                         xTimerStop(abc800_check_timer, portMAX_DELAY);
                         xTimerStart(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStart(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStart(abc800_check_timer, portMAX_DELAY);
                         xTimerStart(abc800_check_timer, portMAX_DELAY);
+                        */
                     }else{
                     }else{
+                        /*
                         xTimerStop(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_delay_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_timer, portMAX_DELAY);
                         xTimerStop(abc800_repeat_timer, portMAX_DELAY);
                         xTimerStop(abc800_check_timer, portMAX_DELAY);
                         xTimerStop(abc800_check_timer, portMAX_DELAY);
+                        */
                     }
                     }
-                }
-                if (keyboard_action == ABC800_KEY_RESET)
-                {
-                    ESP_LOGI(TAG,"RESET");
-                    digitalWrite(A800_RST,LOW);
-                    delay(200);
-                    digitalWrite(A800_RST,HIGH);
-
-                }
-
-            }       
+                } 
+            vTaskDelay(1 / portTICK_PERIOD_MS);    
         }
         }
     }
     }
     
     
@@ -226,6 +246,7 @@ namespace abc800
             outkey.modifier =0x00;
             outkey.modifier =0x00;
             outkey.special = 0x00;
             outkey.special = 0x00;
             outkey.ascii = abc800key;
             outkey.ascii = abc800key;
+            ESP_LOGI(TAG,"KEY %d",abc800key);
             if (abc800key >=0x61 && abc800key <=0x7a){ // small letter
             if (abc800key >=0x61 && abc800key <=0x7a){ // small letter
                 return (outkey);
                 return (outkey);
             }
             }
@@ -241,6 +262,7 @@ namespace abc800
                     abc800key != 0x27){ // Digits symbols
                     abc800key != 0x27){ // Digits symbols
                 return (outkey);
                 return (outkey);
             }
             }
+            
             switch(abc800key){
             switch(abc800key){
    
    
                 case 0x2b:		// +
                 case 0x2b:		// +

+ 2 - 2
sw/key800/src/main.cpp

@@ -59,8 +59,8 @@ portMUX_TYPE sync_isr = portMUX_INITIALIZER_UNLOCKED;
 void setup()
 void setup()
 {
 {
   Serial.begin(KEY800_SERIAL_BAUD_RATE);
   Serial.begin(KEY800_SERIAL_BAUD_RATE);
-  Serial1.begin(650,SERIAL_8N2,A800_RXD,A800_TXD);
-  abc800_serial_keyboard.begin(KEY800_SERIAL_BAUD_RATE,SWSERIAL_8N2,K800_RXD,K800_TXD,false);
+  Serial1.begin(KEY800_SERIALKETBOARD_BAUD_RATE,SERIAL_8N2,A800_RXD,A800_TXD);
+  abc800_serial_keyboard.begin(KEY800_SERIALKETBOARD_BAUD_RATE,SWSERIAL_8N2,K800_RXD,K800_TXD,false);
   abc800_littlefs.setup();
   abc800_littlefs.setup();
   abc800_littlefs.loadconfig();
   abc800_littlefs.loadconfig();
   abc800_gpio.init();
   abc800_gpio.init();