MBED_LPC1768_Test Pulse msec/usec Interval Output P29/P30 & Input P21 Status Send USB Serial Log

Dependencies:   mbed

Revision:
0:47c1b6a0c166
diff -r 000000000000 -r 47c1b6a0c166 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 29 02:41:54 2018 +0000
@@ -0,0 +1,1638 @@
+/////////////////////////////////////////////////////////////////////
+//  MBED  Pulse Test OutPut / Input Checkfor RIX/TRIX              //
+//      copy from SingleCH Dose Measure                            //
+///            Since 2018.05.08  H.Tsunemoto                       //
+//          Pulse Output X-ray Off P30 
+/////////////////////////////////////////////////////////////////////
+
+#include "mbed.h"
+#include "stdio.h"
+#include "math.h"
+#include "LPC17xx.h" 
+// Serial TX & RX interrupt loopback test using formatted IO - sprintf and sscanf
+// Connect TX to RX (p9 to p10)
+// or can also use USB and type back in the number printed out in a terminal window
+// Sends out ASCII numbers in a loop and reads them back
+// Since 2013.08.
+// If not the same number LED4 goes on
+// LED1 and LED2 ADC
+// LED3 changing indicate main loop running
+
+//-------------------------------------//
+// --- MBED I/O Asign  declaration --- //
+//-------------------------------------//
+// Serial Port Asign P9:TX P10:RX
+Serial device(USBTX, USBRX); // tx, rx  //Serial device(p9, p10);  // tx, rx
+// ADC Port Asign P15: ad_ch1  P16 = ad_ch2
+// 2017.02.08 H.Tsunemoto 
+AnalogIn ad_ch1(p20); // AD CH1 P19 MBED ADC Input
+AnalogIn ad_ch2(p19); // AD CH2 P20 MBED ADC Input
+//AnalogIn ad_ch3(p17); //AD CH2
+AnalogOut dac_output(p18);
+//DigitalOut POut_CH1_Rng(p21);   // Pout CH1 Range Select
+//DigitalOut POut_CH2_Rng(p22);   // Pout CH2 Range Select
+DigitalOut POut_P30_Pulse(p30);   // Pout CH2 Range Select
+DigitalOut POut_P29_Pulse(p29);   // Pout CH2 Range Select
+DigitalIn  PInp_P21_Port(p21);      // Port I/O Status Input
+
+// Can also use USB and type back in the number printed out in a terminal window
+// Serial monitor_device(USBTX, USBRX);
+DigitalOut led1(LED1);          // ADC Active
+DigitalOut led2(LED2);          // ADC Input Cycle
+DigitalOut led3(LED3);          // Main Loop Cycle
+DigitalOut led4(LED4);          // DAC Active
+BusOut leds(LED4,LED3,LED2,LED1); //LED
+
+#define Debug_LED_Active 1
+#define Debug_LED_Disable 0
+int i_LED_Active = Debug_LED_Disable;
+//----  ADC Interrupt Timer -----//
+int main_loop_count = 0;
+Ticker ADC_Timer;
+Timer t;
+
+//-------- ADC Measure Mode Parameter declaration  --------//
+typedef struct  st_PulseW_param{
+    int   i_sample_interval; // DAC Output Pattern
+    int  i_usec_Pulse_width;
+    int  i_usec_Pulse_Interval;
+    int  i_usec_Pulse_RepCnt;
+   int  i_msec_Pulse_width;
+    int  i_msec_Pulse_Interval;
+    int  i_msec_Pulse_RepCnt;
+    int   i_PulseTestEnable;
+    int   i_msec_Pulse_OnOffWait;
+    int   i_CH2_Range;
+ }ST_PulseW_PARAM;
+
+ST_PulseW_PARAM st_p_test_mode_param;
+
+//-------- ADC Measure Mode Parameter Default Set  --------//
+const ST_PulseW_PARAM const_PulseTest_Param_Default=
+{
+        1000       //i_sample_int=1000 microS
+        ,5       // Pulse Width  Default 1usec
+        ,500       // Pulse Interval Default 100usec
+        ,100        // Pulse Repeat Count
+        ,10         // i_msec_Pulse_width  Default 1msec
+        ,1000        // i_msec_Pulse_width Default 100msec
+        ,100         // i_msec_Pulse_RepCnt
+        ,0          // Pulse Trase Log Enable Default Disable
+        ,50000        // i_msec_Pulse_OnOffWait Default 5000msec
+        ,0
+ };
+void adc_param_init();
+
+
+
+
+//--------------------------------//
+// --- Serial Communication  ---  //
+//--------------------------------//
+void Tx_interrupt();
+void Rx_interrupt();
+void send_line();
+int read_line();  // Return Rec CHAR Count 2013.08.08 Tsunemoto Append
+
+
+
+//---------- H.Tsunemoto Scince 2013.08.08  ---------// 
+//-----------------------------------------------------------//
+//--------- Timer Innterrupt For DAC Control  ---------------//
+//-----------------------------------------------------------//
+int timer_count=0;
+int timer_1Sec=0;
+
+bool b_PulseTestStatus = false;         // Pulse Test STatus
+#define P_TESTMode_Nop          0
+#define P_TESTMode_1SHOT_OFF    1
+#define P_TESTMode_1SHOT_ON     2
+#define P_TESTMode_Ntimes_OFF   3
+#define P_TESTMode_Ntimes_ON    4
+#define P_TESTMode_Ntimes_ONOFF   5
+
+unsigned int ui_PulseTestMode = P_TESTMode_Nop;         // Pulse Test Mode
+
+#define P_TESTSEQ_Nop           0       // Test Start
+#define P_TESTSEQ_START         1       // Test Start
+#define P_TESTSEQ_ON            2       // Test ON   ONOFFCHeck P29 ON
+#define P_TESTSEQ_OFF           3       // Test OFF  ONOFFCHeck P29 OFF
+#define P_TESTSEQ_End           4       // Test END
+#define P_TESTSEQ_ONOFF_P30_ON  5       // Test ONOFFCHeck P30 ON
+#define P_TESTSEQ_ONOFF_P30_OFF 6       // Test ONOFFCHeck P30 OFF
+
+unsigned int ui_PulseTestSequence = P_TESTSEQ_Nop;         // Sequence Status
+
+unsigned int ui_Pulse_ON_Cnt = 0;
+unsigned int ui_Pulse_Interval_Cnt = 0;
+unsigned int ui_Pulse_Test_Cycle_Cnt = 0;
+unsigned int ui_TestTimeCount =0;
+unsigned int ui_PulseAfter_Count =0;
+int i_PortP21_Stat =1;
+int i_PortP21_Stat_New =0;
+int i_PortP21_Stat_Ave[3] ={0,0,0};
+
+
+unsigned int ui_Main_Serial_Delay = 0;
+#define MAIN_TEST_STAT_NOP 0
+#define MAIN_TEST_STAT_START 1
+#define MAIN_TEST_STAT_END  2
+#define MAIN_TEST_STAT_CNT  3
+unsigned int ui_Main_Test_Status = MAIN_TEST_STAT_NOP;
+char c_TEST_msg[32];
+
+
+//void TIMER0_IRQHandler(void);
+void timer0_init(void);
+//---------  New Append Function  ---------//
+
+void Ser_Command_Input();
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//------------  usec Short Pulse Test ---------------//
+void  com_Check_usecPulseA(int i_RecCharCount);
+void  com_Check_usecPulseUP1(int i_RecCharCount);
+void  com_Check_usecPulseUPN(int i_RecCharCount);
+void  com_Check_usecPulseB(int i_RecCharCount);
+void  com_Check_usecPulseUX1(int i_RecCharCount);
+void  com_Check_usecPulseUXN(int i_RecCharCount);
+void  com_Check_usecUPW(int i_RecCharCount);
+void  com_Check_usecUPI(int i_RecCharCount);
+void  com_Check_usecUPC(int i_RecCharCount);
+//------------  msec  Pulse Test (Normal)---------------//
+//bool com_Check_msecPulseA(int i_RecCharCount);
+void  com_Check_msecPulseMP1(int i_RecCharCount);
+void com_Check_msecPulseMPN(int i_RecCharCount);
+//bool com_Check_msecPulseB(int i_RecCharCount);
+void  com_Check_msecPulseMX1(int i_RecCharCount);
+void  com_Check_msecPulseMXN(int i_RecCharCount);
+void  com_Check_msecPulseMTN(int i_RecCharCount);
+void  com_Check_msecPulseMTW(int i_RecCharCount);
+void  com_Check_msecMPW(int i_RecCharCount);
+void  com_Check_msecMPI(int i_RecCharCount);
+void  com_Check_msecMPC(int i_RecCharCount);
+void  com_Check_msecMPT(int i_RecCharCount);
+//bool com_Check_usecPRC(int i_RecCharCount);
+/// ADC No.1 "SMP 1000"  ADC Sample Rate 2 - 1000 msec
+bool com_Check_SMP(int i_RecCharCount);
+/// ADC No.4 "START" ADC Sample Start
+bool com_Check_START(int i_RecCharCount);
+// ADC No.5 "STOP" ADC Sample Stop
+bool com_Check_STOP(int i_RecCharCount);
+// ADC No.6     // "STAT?"
+void com_ADC_Table_Param_Send();  
+// ADC No.7     // "LED0" LED Ena
+bool com_Check_LED(int i_RecCharCount);  
+//----------------------------------------------------------------//
+
+// Circular buffers for serial TX and RX data - used by interrupt routines
+const int ser_buffer_size = 255;
+// might need to increase buffer size for high baud rates
+char tx_buffer[ser_buffer_size];
+char rx_buffer[ser_buffer_size];
+// Circular buffer pointers
+// volatile makes read-modify-write atomic
+volatile int tx_in=0;
+volatile int tx_out=0;
+volatile int rx_in=0;
+volatile int rx_out=0;
+// Line buffers for sprintf and sscanf
+char tx_line[80];
+char rx_line[80];
+//---  2013.08.08 Tsunemoto ------//
+//--  rx Data Cr Rec Counter
+volatile int rx_cr_Rec = 0;
+//
+
+/////////////////////////////////////////////////////////////////
+//              <<<<  Main Function  >>>>                      //
+/////////////////////////////////////////////////////////////////
+// ---------------------------------------------------------------// 
+// main test program
+int main() {
+    // Serial Speed Set 
+    device.baud(115200);
+
+// Setup a serial interrupt function to receive data
+    device.attach(&Rx_interrupt, Serial::RxIrq);
+// Setup a serial interrupt function to transmit data
+    device.attach(&Tx_interrupt, Serial::TxIrq);
+           POut_P30_Pulse.write(0);
+           POut_P29_Pulse.write(0);
+ 
+// Formatted IO test using send and receive serial interrupts
+// Timer 0 Interrupt Initial Set //    
+    timer0_init();
+    timer_count = 0;
+
+//--- ADC Measurement Control Parameter Initial Set ---//
+    adc_param_init(); 
+    // PInp_P21 Port Status Initial Set
+    while (i_PortP21_Stat != i_PortP21_Stat_New)
+    {
+        
+        i_PortP21_Stat_Ave[0] = i_PortP21_Stat_Ave[1];
+        i_PortP21_Stat_Ave[1] = i_PortP21_Stat_Ave[2];
+        i_PortP21_Stat_Ave[2] = PInp_P21_Port.read();
+        if((i_PortP21_Stat_Ave[0] == i_PortP21_Stat_Ave[1])
+            && (i_PortP21_Stat_Ave[0] == i_PortP21_Stat_Ave[2])){
+             i_PortP21_Stat_New =    i_PortP21_Stat_Ave[0];
+             i_PortP21_Stat = i_PortP21_Stat_New;
+        }
+        
+    }
+//--- DAC Control Parameter Init --- //
+ //   dac1_param_init();
+// -- Main Loop -- //
+    while (1) {
+            if(i_LED_Active == Debug_LED_Active){
+                 led3 = (led3+1) & 1;
+            }
+            if(st_p_test_mode_param.i_PulseTestEnable >0){
+                led4 =1;
+                i_PortP21_Stat_Ave[0] = i_PortP21_Stat_Ave[1];
+                i_PortP21_Stat_Ave[1] = i_PortP21_Stat_Ave[2];
+                i_PortP21_Stat_Ave[2] = PInp_P21_Port.read();
+                if((i_PortP21_Stat_Ave[0] == i_PortP21_Stat_Ave[1])
+                    && (i_PortP21_Stat_Ave[0] == i_PortP21_Stat_Ave[2])){
+                    i_PortP21_Stat_New =    i_PortP21_Stat_Ave[0];
+               }
+                if((ui_Main_Serial_Delay == 0) && (tx_in == tx_out)){
+                    if(i_PortP21_Stat != i_PortP21_Stat_New){
+                        i_PortP21_Stat = i_PortP21_Stat_New;
+//                      i_num = ( st_p_test_mode_param.st_p_test_mode_param.i_PulseTestEnable ) ;
+                      sprintf(tx_line,"C:,%4d,P:,%4d,P21=,%1d\r\n"
+                      ,ui_TestTimeCount,ui_PulseAfter_Count,i_PortP21_Stat);
+                      send_line();
+                      ui_Main_Serial_Delay=10;          // Send Check 1.0msec Delay
+                    }
+                    if(ui_Main_Test_Status != MAIN_TEST_STAT_NOP){
+                        ui_Main_Test_Status = MAIN_TEST_STAT_NOP;
+                        if(c_TEST_msg[0] >0){
+                            sprintf(tx_line,"%s\r\n",c_TEST_msg);
+                            send_line();
+ //                             c_TEST_msg[0]=0;
+                        }
+                      ui_Main_Serial_Delay=10;          // Send Check 1.0msec Delay
+                    }
+                }
+                led4 =0;
+            }
+  //          if (i_adc_ActiveMode_status != ActiveMode_ADC_Sample_Stop){
+            
+  //              ad_sample_send();// --- ADC Sample & Serial Data Out  ---  //
+  //          }
+            if(rx_cr_Rec != 0){
+                Ser_Command_Input();
+            }
+ /*            main_loop_count++;
+             if(main_loop_count>=100000){
+                led3 = (led3+1) & 1;
+                main_loop_count = 0;
+             }
+*/            /////////////////////////////////
+      }
+}
+
+
+//-------------------------------------------------------//
+//    ADC Measurement Parameter Initial Set                          //
+// 2013.08.14 H.Tsunemoto
+//typedef struct  st_PulseW_param{
+//    int   i_sample_interval; // DAC Output Pattern
+//    float f_trigger_level;
+//    unsigned short us_trigger_level;    // (3.3f/1023) * f_trigger_level (Image)
+//    int i_pre_trig_point;
+//    int i_usec_Pulse_end_time;
+//}ST_PulseW_PARAM;
+//
+//ST_PulseW_PARAM st_p_test_mode_param;
+//-------------------------------------------------------//
+void adc_param_init()
+{
+    st_p_test_mode_param.i_sample_interval = const_PulseTest_Param_Default.i_sample_interval;
+
+   st_p_test_mode_param.i_usec_Pulse_width = const_PulseTest_Param_Default.i_usec_Pulse_width;
+   st_p_test_mode_param.i_usec_Pulse_Interval = const_PulseTest_Param_Default.i_usec_Pulse_Interval;
+   st_p_test_mode_param.i_usec_Pulse_RepCnt = const_PulseTest_Param_Default.i_usec_Pulse_RepCnt;
+
+   st_p_test_mode_param.i_msec_Pulse_width = const_PulseTest_Param_Default.i_msec_Pulse_width;
+   st_p_test_mode_param.i_msec_Pulse_Interval = const_PulseTest_Param_Default.i_msec_Pulse_Interval;
+   st_p_test_mode_param.i_msec_Pulse_RepCnt = const_PulseTest_Param_Default.i_msec_Pulse_RepCnt;
+   st_p_test_mode_param.i_msec_Pulse_OnOffWait = const_PulseTest_Param_Default.i_msec_Pulse_OnOffWait;
+   st_p_test_mode_param.i_PulseTestEnable = const_PulseTest_Param_Default.i_PulseTestEnable;
+  
+   /*
+     int   i_sample_interval; // DAC Output Pattern
+    int  i_usec_Pulse_width;
+    int  i_usec_Pulse_Interval;
+    int  i_usec_Pulse_RepCnt;
+    int  i_msec_Pulse_width;
+    int  i_msec_Pulse_Interval;
+    int  i_msec_Pulse_RepCnt;
+    int   i_PulseTestEnable;
+    int   i_msec_Pulse_OnOffWait;
+    int   i_CH2_Range;
+ 
+   */
+}
+///////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////
+// --- 0.1msec Interrupt Timer Pulse Test Sequence --- //
+//  #define P_TESTMode_OFF          0
+//  #define P_TESTMode_1SHOT_OFF    1
+//  #define P_TESTMode_1SHOT_ON     2
+//  #define P_TESTMode_Ntimes_OFF   3
+//  #define P_TESTMode_Ntimes_ON    4
+//  unsigned int ui_PulseTestMode = P_TESTMode_OFF;         // Pulse Test Mode
+//  
+//  #define P_TESTSEQ_Nop       0       // Test Start
+//  #define P_TESTSEQ_START     1       // Test Start
+//  #define P_TESTSEQ_ON        2       // Test Start
+//  #define P_TESTSEQ_OFF       3       // Test Start
+//  #define P_TESTSEQ_End       4       // Test Start
+//  unsigned int ui_PulseTestSequence = P_TESTSEQ_Nop;         // Sequence Status
+//  unsigned int ui_Pulse_ON_Cnt = 0;
+//  unsigned int ui_Pulse_Interval_Cnt = 0;
+//  unsigned int ui_Pulse_Test_Cycle_Cnt = 0;
+/////////////////////////////////////////////////////////
+void PulseTestSequence(void)
+{
+        /////////////////////////////////////////////////////////
+        //////////    -------------------------    //////////////   
+        //////////       Pulse Test Sequence       //////////////   
+        //////////    -------------------------    //////////////
+        /////////////////////////////////////////////////////////
+        switch (ui_PulseTestMode){
+            case P_TESTMode_Nop:
+                break;
+        /////////////////////////////////////////////////////////
+        //////////     --------------------------   //////////////
+        //////////     --   XRay OFF 1Shot     --   //////////////
+        //////////     --------------------------   //////////////
+        /////////////////////////////////////////////////////////
+            case P_TESTMode_1SHOT_OFF:
+                //  -----------    X ray OFF 1Shot Test  ----------//
+                switch (ui_PulseTestSequence){
+                    case P_TESTSEQ_Nop:
+                        break;
+                    case P_TESTSEQ_START:
+//                         sprintf(c_TEST_msg,"START,P30,P1Shot\n");
+//                        ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                       POut_P30_Pulse.write(1);
+ //                       i_PortP21_Stat = PInp_P21_Port.read();
+                        ui_PulseAfter_Count =0;
+                        ui_TestTimeCount=1;
+                        ui_PulseTestSequence = P_TESTSEQ_ON;
+                        ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                        break;
+                    case P_TESTSEQ_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P30_Pulse.write(0);
+                                ui_PulseTestSequence = P_TESTSEQ_End;
+                                sprintf(c_TEST_msg,"END,P30,P1Shot\n");
+                                ui_Main_Test_Status = MAIN_TEST_STAT_END;
+                            }
+                        break;
+                    case P_TESTSEQ_End:
+                        break;
+                    default:
+                        break;
+                }
+                //--------------------------------------------------//
+                break;
+        /////////////////////////////////////////////////////////
+        //////////     --------------------------   //////////////
+        //////////     --   XRay ON(P29) 1Shot --   //////////////
+        //////////     --------------------------   //////////////
+        /////////////////////////////////////////////////////////
+            case P_TESTMode_1SHOT_ON:
+               //  -----------    X ray OFF 1Shot Test  ----------//
+                switch (ui_PulseTestSequence){
+                    case P_TESTSEQ_Nop:
+                        break;
+                    case P_TESTSEQ_START:
+//                        sprintf(c_TEST_msg,"START,P29,P1Shot\n");
+//                         ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                        POut_P29_Pulse.write(1);
+//                        i_PortP21_Stat = PInp_P21_Port.read();
+                         ui_PulseAfter_Count =0;
+                         ui_TestTimeCount++;
+ 
+                        ui_PulseTestSequence = P_TESTSEQ_ON;
+                        ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                        break;
+                    case P_TESTSEQ_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P29_Pulse.write(0);
+                               ui_PulseTestSequence = P_TESTSEQ_End;
+                                 sprintf(c_TEST_msg,"END,P29,P1Shot\n");
+                                ui_Main_Test_Status = MAIN_TEST_STAT_END;
+                           }
+                        break;
+                    case P_TESTSEQ_End:
+                        break;
+                    default:
+                        break;
+                }
+                //--------------------------------------------------//
+                 break;
+        /////////////////////////////////////////////////////////
+        //////////     --------------------------------------   //////////////
+        //////////     --   XRay OFF(P30) N Times Test     --   //////////////
+        //////////     --------------------------------------   //////////////
+        /////////////////////////////////////////////////////////
+           case P_TESTMode_Ntimes_OFF:
+               //  -----------    X ray OFF Cycle N Test  ----------//
+                switch (ui_PulseTestSequence){
+                    case P_TESTSEQ_Nop:
+                        break;
+                    case P_TESTSEQ_START:
+//                       sprintf(c_TEST_msg,"START,P30,PN:,%4d,Times\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+//                        ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                           ui_TestTimeCount=1;
+                           sprintf(c_TEST_msg,"TEST_N,%4d,OFF\n",ui_TestTimeCount);
+                            ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                       POut_P30_Pulse.write(1);
+ //                       i_PortP21_Stat = PInp_P21_Port.read();
+                        ui_PulseAfter_Count =0;
+                        ui_PulseTestSequence = P_TESTSEQ_ON;
+                        ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                      if(st_p_test_mode_param.i_msec_Pulse_RepCnt > 0){
+                            ui_Pulse_Test_Cycle_Cnt = st_p_test_mode_param.i_msec_Pulse_RepCnt-1;
+                        }
+                        else{
+                            ui_Pulse_Test_Cycle_Cnt = 0;
+                        }
+                       break;
+                    case P_TESTSEQ_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P30_Pulse.write(0);
+
+                                if(ui_Pulse_Test_Cycle_Cnt >0){
+                                    ui_Pulse_Test_Cycle_Cnt--;
+                                    ui_Pulse_Interval_Cnt = st_p_test_mode_param.i_msec_Pulse_Interval;
+                                    ui_PulseTestSequence = P_TESTSEQ_OFF;
+                                }
+                                else{
+                                    ui_PulseTestSequence = P_TESTSEQ_End;
+                                    sprintf(c_TEST_msg,"END,P30,PN:\n");
+                                    ui_Main_Test_Status = MAIN_TEST_STAT_END;
+                                }
+                            }
+                        break;
+                    case P_TESTSEQ_OFF:
+                            if(ui_Pulse_Interval_Cnt >0){
+                                ui_Pulse_Interval_Cnt--;
+                            }
+                            else{
+                                 ui_TestTimeCount++;
+                                sprintf(c_TEST_msg,"TEST_N,%4d,OFF\n",ui_TestTimeCount);
+                                ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                                POut_P30_Pulse.write(1);
+ //                               i_PortP21_Stat = PInp_P21_Port.read();
+                                ui_PulseAfter_Count =0;
+                               ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                                 ui_PulseTestSequence = P_TESTSEQ_ON;
+                            }
+                        break;
+                    case P_TESTSEQ_End:
+                        break;
+                    default:
+                        break;
+                }
+                //--------------------------------------------------//
+                break;
+        /////////////////////////////////////////////////////////
+        //////////     --------------------------------------   //////////////
+        //////////     --   XRay ON(P29) N Times Test     --   //////////////
+        //////////     --------------------------------------   //////////////
+        /////////////////////////////////////////////////////////
+          case P_TESTMode_Ntimes_ON:
+              //  -----------    X ray OFF Cycle N Test  ----------//
+                switch (ui_PulseTestSequence){
+                    case P_TESTSEQ_Nop:
+                        break;
+                    case P_TESTSEQ_START:
+                                   ui_TestTimeCount=1;
+                           sprintf(c_TEST_msg,"TEST_N,%4d,ON\n",ui_TestTimeCount);
+                            ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+ //                       sprintf(c_TEST_msg,"START,P29,PN:,%4d,Times\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+ //                       ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                          POut_P29_Pulse.write(1);
+//                        i_PortP21_Stat = PInp_P21_Port.read();
+                       ui_PulseAfter_Count =0;
+                        ui_PulseTestSequence = P_TESTSEQ_ON;
+                        ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                      if(st_p_test_mode_param.i_msec_Pulse_RepCnt > 0){
+                            ui_Pulse_Test_Cycle_Cnt = st_p_test_mode_param.i_msec_Pulse_RepCnt-1;
+                        }
+                        else{
+                            ui_Pulse_Test_Cycle_Cnt = 0;
+                        }
+                       break;
+                    case P_TESTSEQ_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P29_Pulse.write(0);
+ //                                ui_TestTimeCount++;
+                               if(ui_Pulse_Test_Cycle_Cnt >0){
+                                    ui_Pulse_Test_Cycle_Cnt--;
+                                    ui_Pulse_Interval_Cnt = st_p_test_mode_param.i_msec_Pulse_Interval;
+                                    ui_PulseTestSequence = P_TESTSEQ_OFF;
+                                }
+                                else{
+                                    ui_PulseTestSequence = P_TESTSEQ_End;
+                                    sprintf(c_TEST_msg,"END,P29,PN:\n");
+                                    ui_Main_Test_Status = MAIN_TEST_STAT_END;
+                                 }
+                            }
+                        break;
+                    case P_TESTSEQ_OFF:
+                            if(ui_Pulse_Interval_Cnt >0){
+                                ui_Pulse_Interval_Cnt--;
+                            }
+                            else{
+                                 ui_TestTimeCount++;
+                                sprintf(c_TEST_msg,"TEST_N,%4d,ON\n",ui_TestTimeCount);
+                                ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                                POut_P29_Pulse.write(1);
+ //                               i_PortP21_Stat = PInp_P21_Port.read();
+                                 ui_PulseAfter_Count =0;
+                               ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                               ui_PulseTestSequence = P_TESTSEQ_ON;
+                            }
+                        break;
+                    case P_TESTSEQ_End:
+                        break;
+                    default:
+                        break;
+                }
+                //--------------------------------------------------//
+               break;
+        ////////////////////////////////////////////////////////////////////////////////
+        //////////     ------------------------------------------------   //////////////
+        //////////     --   XRay ON/OFF (P29 & P30) N Times Test     --   //////////////
+        //////////     ------------------------------------------------   //////////////
+        ////////////////////////////////////////////////////////////////////////////////
+           case P_TESTMode_Ntimes_ONOFF:
+              //  -----------    X ray OFF Cycle N Test  ----------//
+                switch (ui_PulseTestSequence){
+                    case P_TESTSEQ_Nop:
+                        break;
+                    case P_TESTSEQ_START:
+//                        sprintf(c_TEST_msg,"START,ONOFF_P29_30,PN:,%4d,Times\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+//                        ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                          ui_TestTimeCount=1;
+                          sprintf(c_TEST_msg,"TEST_N,%4d,ON\n",ui_TestTimeCount);
+                           ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                          POut_P29_Pulse.write(1);
+ //                       i_PortP21_Stat = PInp_P21_Port.read();
+                        ui_PulseAfter_Count =0;
+                        ui_PulseTestSequence = P_TESTSEQ_ON;
+                        ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                      if(st_p_test_mode_param.i_msec_Pulse_RepCnt > 0){
+                            ui_Pulse_Test_Cycle_Cnt = st_p_test_mode_param.i_msec_Pulse_RepCnt-1;
+                        }
+                        else{
+                            ui_Pulse_Test_Cycle_Cnt = 0;
+                        }
+                       break;
+                    case P_TESTSEQ_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P29_Pulse.write(0);
+                                 ui_Pulse_Interval_Cnt = st_p_test_mode_param.i_msec_Pulse_Interval;
+                                 ui_PulseTestSequence = P_TESTSEQ_OFF;
+                             }
+                        break;
+                    case P_TESTSEQ_OFF:
+                            if(ui_Pulse_Interval_Cnt >0){
+                                ui_Pulse_Interval_Cnt--;
+                            }
+                            else{
+                                sprintf(c_TEST_msg,"TEST_N,%4d,OFF\n",ui_TestTimeCount);
+                                ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                               POut_P30_Pulse.write(1);
+ //                               i_PortP21_Stat = PInp_P21_Port.read();
+                                 ui_PulseAfter_Count =0;
+                               ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                               ui_PulseTestSequence = P_TESTSEQ_ONOFF_P30_ON;
+                            }
+                        break;
+                    case P_TESTSEQ_ONOFF_P30_ON:
+                            if(ui_Pulse_ON_Cnt >0){
+                                ui_Pulse_ON_Cnt--;
+                            }
+                            else{
+                                POut_P30_Pulse.write(0);
+ 
+ //                                ui_TestTimeCount++;
+                               if(ui_Pulse_Test_Cycle_Cnt >0){
+                                    ui_Pulse_Test_Cycle_Cnt--;
+                                    ui_Pulse_Interval_Cnt = st_p_test_mode_param.i_msec_Pulse_OnOffWait;
+                                    ui_PulseTestSequence = P_TESTSEQ_ONOFF_P30_OFF;
+                                }
+                                else{
+                                    ui_PulseTestSequence = P_TESTSEQ_End;
+                                    sprintf(c_TEST_msg,"END,ONOFF_P29_30:\n");
+                                    ui_Main_Test_Status = MAIN_TEST_STAT_END;
+                                }
+                            }
+                        break;
+                    case P_TESTSEQ_ONOFF_P30_OFF:
+                            if(ui_Pulse_Interval_Cnt >0){
+                                ui_Pulse_Interval_Cnt--;
+                            }
+                            else{
+                                  ui_TestTimeCount++;
+                                 sprintf(c_TEST_msg,"TEST_N,%4d,ON\n",ui_TestTimeCount);
+                                ui_Main_Test_Status = MAIN_TEST_STAT_CNT;
+                                POut_P29_Pulse.write(1);
+ //                               i_PortP21_Stat = PInp_P21_Port.read();
+                                 ui_PulseAfter_Count =0;
+                               ui_Pulse_ON_Cnt = st_p_test_mode_param.i_msec_Pulse_width;
+                               ui_PulseTestSequence = P_TESTSEQ_ON;
+                            }
+                        break;
+                    case P_TESTSEQ_End:
+                        break;
+                    default:
+                        break;
+                }
+                //--------------------------------------------------//
+               break;
+            default:        //           
+                break;
+           
+
+        }
+}
+//------------------------------------------------------------------------------//
+//-----    DAC Control Function 
+//  H.Tsunemoto Scince 2013.08.09   
+//    int i_pattern; // DAC Output Pattern
+//    float f_pulse_high;
+//    float f_pulse_low;
+//    int i_usec_Pulse_width;
+//    int i_usec_Pulse_interval;
+//    int i_Total_time;    
+//
+//------------------------------------------------------------------------------//
+//
+//------------------------------------------------------------------------//
+//  Timer Interrupt Routine
+//
+//------------------------------------------------------------------------//
+extern "C" void TIMER0_IRQHandler (void)
+{
+    if((LPC_TIM0->IR & 0x01) == 0x01)   // if MR0 interrupt, proceed
+    {
+        if(i_LED_Active == Debug_LED_Active){
+            led2 =1;
+        }
+        LPC_TIM0->IR |= 1 << 0;         // Clear MR0 interrupt flag
+        timer_count++;                  //increment timer_count
+        if(timer_count >= 10000){
+            timer_count = 0;
+            timer_1Sec++;
+        }
+        if(ui_PulseTestMode != P_TESTMode_Nop){
+               ui_PulseAfter_Count ++;
+            PulseTestSequence();
+            if(ui_Main_Serial_Delay>0){
+                ui_Main_Serial_Delay--;
+            }
+        }
+        if(i_LED_Active == Debug_LED_Active){
+            led2 =0;
+        }
+    }
+}
+ 
+void timer0_init(void)
+{
+    LPC_SC->PCONP |=1<1;            //timer0 power on
+    // 2013.08.09 H.Tsunemoto    100mSec => 0.1mSec Change
+    //LPC_TIM0->MR0 = 2398000;        //100 msec
+    LPC_TIM0->MR0 = 2398;        //0.1 msec
+
+    LPC_TIM0->MCR = 3;              //interrupt and reset control
+                                    //3 = Interrupt & reset timer0 on match
+                                    //1 = Interrupt only, no reset of timer0
+    NVIC_EnableIRQ(TIMER0_IRQn);    //enable timer0 interrupt
+    LPC_TIM0->TCR = 1;              //enable Timer0
+ //   pc.printf("Done timer_init\n\r");
+}
+
+//------------------------------------------------------------------//
+//-----    Serial rx Commmand Input & Parameter Set Function   -----//
+//  Tsunemoto Since 2016.05.20                                     //
+// ADC No.1 "SMP 1000"  ADC Sample Rate 2 - 1000 msec
+// ADC No.2 "RNA 0" ADC CH1 Range  0 / 1
+// ADC No.3 "RNB 1" ADC CH2 Range  0 / 1
+// ADC No.4 "START" ADC Sample Start
+// ADC No.5 "STOP" ADC Sample Stop
+// ADC No.6     // "?"
+
+//------------------------------------------------------------------//
+void Ser_Command_Input()
+{
+    int i_RecCharCount;
+//    int b_CommadERR = 0;
+
+    while(rx_cr_Rec != 0){
+         // Read a line from the large rx buffer from rx interrupt routine
+                 
+        if(rx_in != rx_out){   
+           i_RecCharCount = read_line();
+ //          b_CommadERR = 0;
+           if(i_RecCharCount != 0){
+//////////////////////////////////////////
+//            else{
+                switch(rx_line[0]){
+                    // Header "M"  Pulse Test  Command
+                    // ----  msec Pulse Test Command  ----  //
+                    case 'm':
+                    case 'M':
+                        switch(rx_line[1]){
+                            // Header "MP"  Pulse Test  Command
+                            case 'P':
+                            case 'p':
+                                if((rx_line[2] == 'W') ){
+                                    com_Check_msecMPW( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == 'I') ){
+                                    com_Check_msecMPI( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == 'C')){
+                                    com_Check_msecMPC( i_RecCharCount);
+                                }
+                                 else if((rx_line[2] == 'T')){
+                                    com_Check_msecMPT( i_RecCharCount);
+                                }
+                               break;
+                             // Header "MF"  Pulse Test  Command
+                            case 'f':
+                            case 'F':
+                                if((rx_line[2] == 'N')){
+                                    com_Check_msecPulseMPN( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == '1')){
+                                    com_Check_msecPulseMP1( i_RecCharCount);
+                                }
+                                 break;
+                            // Header "MX"  ADC Control Command
+                            case 'X':
+                            case 'x':
+                                if((rx_line[2] == 'N') ){
+                                    com_Check_msecPulseMXN( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == '1') ){
+                                    com_Check_msecPulseMX1( i_RecCharCount);
+                                }
+                                break;
+                             // Header "MF"  Pulse Test  Command
+                            case 't':
+                            case 'T':
+                                if((rx_line[2] == 'N')){
+                                    com_Check_msecPulseMTN( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == 'W')){
+                                    com_Check_msecPulseMTW( i_RecCharCount);
+                                }
+                                 break;
+                            default:
+                                break;
+                        }
+                        break;
+                    // ----  usec Short Pulse Test Command  ----  //
+                    case 'u':
+                    case 'U':
+                        switch(rx_line[1]){
+                            case 'P':
+                            case 'p':
+                                if((rx_line[2] == 'W') ){
+                                    com_Check_usecUPW(i_RecCharCount);
+                                }
+                                else if((rx_line[2] == 'I') ){
+                                    com_Check_usecUPI(i_RecCharCount);
+                                }
+                                else if((rx_line[2] == 'C')){
+                                    com_Check_usecUPC(i_RecCharCount);
+                                }
+                                break;
+                            case 'f':
+                            case 'F':
+                                if((rx_line[2] == 'N')){
+                                    com_Check_usecPulseUPN(i_RecCharCount);
+                                }
+                                else if((rx_line[2] == '1')){
+                                    com_Check_usecPulseUP1(i_RecCharCount);
+                                }
+                                else{ 
+                                    com_Check_usecPulseA(i_RecCharCount);
+                                }
+                                break;
+                            // Header "A"  ADC Control Command
+                            case 'X':
+                            case 'x':
+                                if((rx_line[2] == 'N') ){
+                                    com_Check_usecPulseUXN( i_RecCharCount);
+                                }
+                                else if((rx_line[2] == '1') ){
+                                    com_Check_usecPulseUX1( i_RecCharCount);
+                                }
+                                else{
+                                    com_Check_usecPulseB(i_RecCharCount);
+                                }
+                                break;
+                            default:
+                                break;
+                        }
+                         break;
+                     case 'S':
+                        if(i_RecCharCount == 1){
+//                                    i_adc_ActiveMode_status = ActiveMode_ADC_Sample_Busy;
+//                                    Start_ADC();
+                       }
+                        else if (rx_line[1] == 'T'){
+                            //case 'T':
+                                if((rx_line[2] == 'A') && (rx_line[3] == 'R') && (rx_line[4] == 'T')){
+ //                                   i_adc_ActiveMode_status = ActiveMode_ADC_Sample_Busy;
+ //                                   Start_ADC();
+ 
+                                }
+                                else if((rx_line[2] == 'O') && (rx_line[3] == 'P') ){
+ //                                   i_adc_ActiveMode_status = ActiveMode_ADC_Sample_Stop;
+ //                                   ADC_Stop();
+                                }
+                                else if ((rx_line[2] == '?')){    //{    "ST?"
+                                    com_ADC_Table_Param_Send();
+                                }
+                                else if ( (rx_line[2] == 'A')&& (rx_line[3] == '?')){    //{    "STA?"
+                                    com_ADC_Table_Param_Send();
+                                }
+                                else if ( (rx_line[2] == 'A')&& (rx_line[3] == 'T')&& (rx_line[4] == '?')){    //{    "STAT?"
+                                    com_ADC_Table_Param_Send();
+                                }
+                                else{
+ //                                   b_CommadERR = 1;
+                                }
+                                //break;
+                        }
+                        else if((rx_line[1] == 'M') && (rx_line[2] == 'P')){
+                            com_Check_SMP( i_RecCharCount);
+                        }
+                        else if (rx_line[1] == '?'){    //{    case '?':
+                            com_ADC_Table_Param_Send();
+                            //break;
+                        }
+                        else{
+                            //default:
+//                            b_CommadERR = 1;
+                            //break;
+                        }
+                        break;
+                    case 'T':  // "T?" Timer Interrupt Counter Repry
+                        if (rx_line[1]=='?'){
+                            sprintf(tx_line,"Timer=%d[S}+%d[x0.1mSec] \r\n",timer_1Sec,timer_count); 
+                            // Copy tx line buffer to large tx buffer for tx interrupt routine
+                            send_line();
+ 
+                        }
+                        else if(rx_line[1]=='C'){
+                            timer_1Sec = timer_count = 0;
+                        }
+                        else{
+ //                           b_CommadERR = 1;
+                        }
+                        break;
+                    
+                     case '?':
+                        if(i_RecCharCount == 1){
+                            com_ADC_Table_Param_Send();
+                              }
+                        else{
+ //                                  b_CommadERR = 1;
+                        }
+                        break;
+                      //break;
+                    case 'E':
+                        if(i_RecCharCount == 1){
+ //                                   i_adc_ActiveMode_status = ActiveMode_ADC_Sample_Stop;
+ //                                   ADC_Stop();
+                           }
+                        else{
+ //                                  b_CommadERR = 1;
+                        }
+                        break;
+                    case 'L':
+                        if((rx_line[1] == 'E') && (rx_line[2] == 'D') ){
+                             com_Check_LED(i_RecCharCount);
+                        }
+                        else{
+                        }
+                    default:
+//                        b_CommadERR = 1;
+                        break;
+                
+                }
+            }
+//            if(rx_line[0] >= 0x20){
+//                if(b_CommadERR == 0){
+//                    sprintf(tx_line,"ACK%d \r\n",rx_cr_Rec); 
+//                    // Copy tx line buffer to large tx buffer for tx interrupt routine
+//                    send_line();
+//                }
+//                else{
+//                    sprintf(tx_line,"ERR%d \r\n",rx_cr_Rec); 
+//                    // Copy tx line buffer to large tx buffer for tx interrupt routine
+//                    send_line();
+//                }
+//            }
+            rx_cr_Rec--;
+        }
+        else{
+            rx_cr_Rec = 0;
+            break;
+        }  
+    }
+}
+
+//////------------------------------------------------------------------------------/////
+//////---------------      usec Short Pulse Test Command       ---------------------/////
+//////------------------------------------------------------------------------------/////
+
+
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//  Input :i_RecCharCount :Command Stringth Length                              //
+//         rx_line[80] :(Global) Rec Data Stringth                              //
+//  Return :bool b_CommadERR  0= ACK                                            //
+//                            1= ERR                                            //
+//////////////////////////////////////////////////////////////////////////////////
+void com_Check_usecPulseA(int i_RecCharCount)
+{
+//    bool b_CommadERR=0;
+  //  int i_num=2;
+    int i_count = st_p_test_mode_param.i_sample_interval;
+    int i;
+        if(i_count == 0){
+            POut_P30_Pulse.write(1);
+            POut_P30_Pulse.write(0);
+        }
+        else{
+           POut_P30_Pulse.write(0);
+            for(i=0;i<i_count;i++){
+                POut_P30_Pulse.write(1);
+            }
+            POut_P30_Pulse.write(0);
+        }
+//    return(b_CommadERR);
+}
+void  com_Check_usecPulseUP1(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+ //   int i_num=2;
+    int i_count = st_p_test_mode_param.i_usec_Pulse_width;
+    int i;
+        if(i_count == 0){
+            POut_P30_Pulse.write(1);
+            POut_P30_Pulse.write(0);
+        }
+        else{
+           POut_P30_Pulse.write(0);
+            for(i=0;i<i_count;i++){
+                POut_P30_Pulse.write(1);
+            }
+            POut_P30_Pulse.write(0);
+        }
+//     return(b_CommadERR);   
+}
+
+void com_Check_usecPulseUPN(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+ //   int i_num=2;
+    int i_PluseWidth = st_p_test_mode_param.i_usec_Pulse_width;
+    int i_usec_PulseInt = st_p_test_mode_param.i_usec_Pulse_Interval;
+    int i_count = st_p_test_mode_param.i_usec_Pulse_RepCnt;
+    if(i_count<0) {
+        i_count = 1;
+    }
+    /*
+       int  i_usec_Pulse_width;
+    int  i_usec_Pulse_Interval;
+    int  i_usec_Pulse_RepCnt;
+
+    */
+    int i,k;
+    for (k=0;k< i_count;k++){   
+           if(i_PluseWidth == 0){
+                POut_P30_Pulse.write(1);
+                POut_P30_Pulse.write(0);
+            }
+            else{
+                POut_P30_Pulse.write(0);
+                for(i=0;i<i_PluseWidth;i++){
+                    POut_P30_Pulse.write(1);
+                }
+                POut_P30_Pulse.write(0);
+            }
+            if(i_usec_PulseInt == 0){
+                POut_P30_Pulse.write(0);
+                POut_P30_Pulse.write(0);
+            }
+            else{
+                POut_P30_Pulse.write(0);
+                for(i=0;i<i_usec_PulseInt;i++){
+                    POut_P30_Pulse.write(0);
+                }
+                POut_P30_Pulse.write(0);
+            }
+           
+    }
+//   return(b_CommadERR);   
+}
+void  com_Check_usecPulseB(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+ //   int i_num=2;
+    int i_count = st_p_test_mode_param.i_sample_interval;
+    int i;
+        if(i_count == 0){
+            POut_P29_Pulse.write(1);
+            POut_P29_Pulse.write(0);
+        }
+        else{
+           POut_P29_Pulse.write(0);
+            for(i=0;i<i_count;i++){
+            POut_P29_Pulse.write(1);
+              }
+            POut_P29_Pulse.write(0);
+        }
+//   return(b_CommadERR);    
+}
+void com_Check_usecPulseUX1(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+ //   int i_num=2;
+    int i_count = st_p_test_mode_param.i_usec_Pulse_width;
+    int i;
+        if(i_count == 0){
+            POut_P29_Pulse.write(1);
+            POut_P29_Pulse.write(0);
+        }
+        else{
+           POut_P29_Pulse.write(0);
+            for(i=0;i<i_count;i++){
+            POut_P29_Pulse.write(1);
+              }
+            POut_P29_Pulse.write(0);
+        }
+ //     return(b_CommadERR); 
+}
+void com_Check_usecPulseUXN(int i_RecCharCount)
+{
+//    bool b_CommadERR=0;
+ //   int i_num=2;
+ //   int i_count = st_p_test_mode_param.i_sample_interval;
+    int i_PluseWidth = st_p_test_mode_param.i_usec_Pulse_width;
+    int i_usec_PulseInt = st_p_test_mode_param.i_usec_Pulse_Interval;
+    int i_count = st_p_test_mode_param.i_usec_Pulse_RepCnt;
+    if(i_count<0) {
+        i_count = 1;
+    }
+   int i,k;
+   for (k=0;k< i_count;k++){   
+         if(i_PluseWidth == 0){
+            POut_P29_Pulse.write(1);
+            POut_P29_Pulse.write(0);
+        }
+        else{
+           POut_P29_Pulse.write(0);
+            for(i=0;i<i_PluseWidth;i++){
+            POut_P29_Pulse.write(1);
+              }
+            POut_P29_Pulse.write(0);
+        }
+        if(i_usec_PulseInt == 0){
+            POut_P29_Pulse.write(0);
+            POut_P29_Pulse.write(0);
+        }
+        else{
+           POut_P29_Pulse.write(0);
+            for(i=0;i<i_usec_PulseInt;i++){
+            POut_P29_Pulse.write(0);
+              }
+            POut_P29_Pulse.write(0);
+        }
+    }
+ //     return(b_CommadERR); 
+}
+
+//------------------------------------------------------------------------------//
+//  ADC No.02  "PAW xxxx  Pulse WidthCount Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_usecUPW(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+//        b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_usec_Pulse_width = (int)( i_num);
+         
+   }
+ //   return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.03  "PIW xxxx  Pulse Interval Count Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_usecUPI(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_usec_Pulse_Interval = (int)( i_num);
+         
+   }
+ //   return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.04  "PRC xxxx  Pulse Repeat Count Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_usecUPC(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_usec_Pulse_RepCnt = (int)( i_num);
+         
+   }
+ //   return(b_CommadERR);
+ }
+//////------------------------------------------------------------------------------/////
+//////---------------      ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑      ---------------------/////
+//////------------------------------------------------------------------------------/////
+
+//////------------------------------------------------------------------------------/////
+//////---------------         msec Pulse Test Command          ---------------------/////
+//////------------------------------------------------------------------------------/////
+
+
+//////////////////////////////////////////////////////////////////////////////////
+//------------    Command Check & Set Function ---------------------------------//
+//  Input :i_RecCharCount :Command Stringth Length                              //
+//         rx_line[80] :(Global) Rec Data Stringth                              //
+//  Return :bool b_CommadERR  0= ACK                                            //
+//                            1= ERR                                            //
+//////////////////////////////////////////////////////////////////////////////////
+void com_Check_msecPulseMP1(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+ //                        sprintf(c_TEST_msg,"START,P30,P1Shot\n");
+ //                       ui_Main_Test_Status = MAIN_TEST_STAT_START;
+                            sprintf(tx_line,"START,P30,P1Shot\r\n");
+                            send_line();
+    ui_PulseTestMode = P_TESTMode_Nop;
+    ui_PulseTestSequence = P_TESTSEQ_START;
+     ui_PulseTestMode = P_TESTMode_1SHOT_OFF;
+//     return(b_CommadERR);   
+}
+
+void com_Check_msecPulseMPN(int i_RecCharCount)
+{
+//    bool b_CommadERR=0;
+     sprintf(tx_line,"START_N,%4d,Times,OFF_P30\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+                           send_line();
+ //     ui_Main_Test_Status = MAIN_TEST_STAT_START;
+     ui_PulseTestMode = P_TESTMode_Nop;
+    ui_PulseTestSequence = P_TESTSEQ_START;
+     ui_PulseTestMode = P_TESTMode_Ntimes_OFF;
+//   return(b_CommadERR);   
+}
+void com_Check_msecPulseMX1(int i_RecCharCount)
+{
+//    bool b_CommadERR=0;
+    sprintf(tx_line,"START,P29,P1Shot\r\n");
+    send_line();
+      ui_PulseTestMode = P_TESTMode_Nop;
+    ui_PulseTestSequence = P_TESTSEQ_START;
+     ui_PulseTestMode = P_TESTMode_1SHOT_ON;
+ //    return(b_CommadERR);   
+}
+void com_Check_msecPulseMXN(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+      sprintf(tx_line,"START_N,%4d,Times,ON_P29\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+                           send_line();
+     ui_PulseTestMode = P_TESTMode_Nop;
+   ui_PulseTestSequence = P_TESTSEQ_START;
+    ui_PulseTestMode = P_TESTMode_Ntimes_ON;
+  //   return(b_CommadERR);   
+}
+void com_Check_msecPulseMTN(int i_RecCharCount)
+{
+ //   bool b_CommadERR=0;
+                        sprintf(tx_line,"START,%4d,Times,ONOFF_P29_30\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+                            send_line();
+     ui_PulseTestMode = P_TESTMode_Nop;
+    ui_PulseTestSequence = P_TESTSEQ_START;
+    ui_PulseTestMode = P_TESTMode_Ntimes_ONOFF;
+  //   return(b_CommadERR);   
+}
+
+void com_Check_msecPulseMTW(int i_RecCharCount)
+{
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_msec_Pulse_OnOffWait = (int)( i_num);
+         
+   }
+//    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.02  "PAW xxxx  Pulse WidthCount Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_msecMPW(int i_RecCharCount)
+{
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_msec_Pulse_width = (int)( i_num);
+         
+   }
+//    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.03  "PIW xxxx  Pulse Interval Count Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_msecMPI(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_msec_Pulse_Interval = (int)( i_num);
+         
+   }
+ //   return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.04  "PRC xxxx  Pulse Repeat Count Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_msecMPC(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_msec_Pulse_RepCnt = (int)( i_num);
+         
+   }
+ //   return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.04  "PRC xxxx  Pulse Repeat Count Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+void com_Check_msecMPT(int i_RecCharCount)
+{
+//bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+ //       b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        if(i_num >0){
+            st_p_test_mode_param.i_PulseTestEnable = 1;
+        }
+        else{
+            st_p_test_mode_param.i_PulseTestEnable = 0;
+         }
+         
+   }
+ //   return(b_CommadERR);
+ }
+//////------------------------------------------------------------------------------/////
+//////---------------      ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑      ---------------------/////
+//////------------------------------------------------------------------------------/////
+
+//------------------------------------------------------------------------------//
+//  ADC No.1  "SMP xxxx  ADC Sample Interval Set                              //
+//#define ADC_SAMPLE_RATE_MIN  2
+//#define ADC_SAMPLE_RATE_MAX  1000
+//int st_p_test_mode_param.i_sample_interval = 200;  // ADC Sample Rate 5 - 20000(20.0mSec)
+//------------------------------------------------------------------------------//
+bool com_Check_SMP(int i_RecCharCount)
+{
+bool b_CommadERR=0;
+int i_num=2;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+        b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        st_p_test_mode_param.i_sample_interval = (int)( i_num);
+         
+   }
+    return(b_CommadERR);
+ }
+//------------------------------------------------------------------------------//
+//  ADC No.5  "A?"  DAC Parameter Repry                                          //
+//typedef struct  st_PulseW_param{
+//    int   i_sample_interval; // DAC Output Pattern
+//    float f_trigger_level;
+//    us_trigger_level;
+//    int i_pre_trig_point;
+//    int i_usec_Pulse_end_time;
+//}ST_PulseW_PARAM;
+//
+//ST_PulseW_PARAM st_p_test_mode_param;
+//
+//------------------------------------------------------------------------------//
+void com_ADC_Table_Param_Send()
+{
+int i_num;
+//bool b_CommadERR=0;
+
+    // 2017.02.22 for Single CH Only CH0 <=> CH1 Exchange
+          sprintf(tx_line,"Pulse Out Check  MBED\r\n");   // 2017.02.22 for Single CH Only CH0 P,20,21  CH1= P19,22
+   //2016.06.21 for MBED Dose Measure 2CH_2Range Title & Ver Send Append
+   //      sprintf(tx_line,"MBED Dose Measure Ver0.45\r\n");   // 2016.06.21 for Max.Min Detect Remove & Title&Software Ver Reply Append
+        send_line();
+      
+ //       i_num = ( st_p_test_mode_param.i_sample_interval ) ;
+ //       sprintf(tx_line,"SMP %4d[= x 0.2usec]\r\n",i_num);
+ //       send_line();
+ //       sprintf(tx_line," \r\n",i_num);
+ //       send_line();
+         sprintf(tx_line,"msec Pulse Test Command & Parameter \r\n");
+        send_line();
+        i_num = ( st_p_test_mode_param.i_PulseTestEnable ) ;
+        sprintf(tx_line," MPT: %1d[= P21 Reply Check ]\r\n",i_num);
+        send_line();
+      
+        sprintf(tx_line," MF1:P30 MX1:P29 Pulse 1shot PW=MPW x0.1msec PulseOut\r\n");
+        send_line();
+        sprintf(tx_line," MFN: P30 MXN: P29 Pulse Out Repeat\r\n");
+        send_line();
+         sprintf(tx_line," MTN: ON/OFF P29&30 Repeat Check \r\n");
+        send_line();
+        sprintf(tx_line,"  Pulse Width :MPW %4d[= x 0.1msec]\r\n",st_p_test_mode_param.i_msec_Pulse_width);
+        send_line();
+         sprintf(tx_line,"  Pulse Interval :MPI %4d[= x 0.1msec]\r\n",st_p_test_mode_param.i_msec_Pulse_Interval);
+        send_line();
+        sprintf(tx_line,"  Pulse Repeat Count :MPC %4d Count \r\n",st_p_test_mode_param.i_msec_Pulse_RepCnt);
+        send_line();
+        sprintf(tx_line,"  OFF-ONP30-P29Wait :MTW %4d Count \r\n",st_p_test_mode_param.i_msec_Pulse_OnOffWait);
+        send_line();
+
+        sprintf(tx_line,"for Debug Test \r\n");
+        send_line();
+       
+       sprintf(tx_line,"usec Short Pulse Test Command & Parameter \r\n");
+        send_line();
+        sprintf(tx_line," UF1:P30 UX1:P29 Pulse 1shot PW=UPW x0.2usec PulseOut\r\n");
+        send_line();
+        sprintf(tx_line," UFN: P30 UXN: P29 Pulse Out Repeat n\r\n");
+        send_line();
+        sprintf(tx_line,"  Pulse Width :UPW %4d[= x 0.2usec]\r\n",st_p_test_mode_param.i_usec_Pulse_width);
+        send_line();
+         sprintf(tx_line,"  Pulse Interval :UPI %4d[= x 0.2usec]\r\n",st_p_test_mode_param.i_usec_Pulse_Interval);
+        send_line();
+        sprintf(tx_line,"  Pulse Repeat Count :UPC %4d Count \r\n",st_p_test_mode_param.i_usec_Pulse_RepCnt);
+        send_line();
+ //  return(b_CommadERR);
+
+ // for Debug
+  
+}
+//------------------------------------------------------------------------------//
+// ADC No.7 "LED 1" Devug LED Active  0 / 1
+//------------------------------------------------------------------------------//
+bool com_Check_LED(int i_RecCharCount)
+{
+bool b_CommadERR=0;
+int i_num=0;
+char *pt_comRec;
+
+    if(i_RecCharCount < 4){
+        b_CommadERR = 1;
+    } 
+    else{
+        pt_comRec = (char *)&rx_line[3];
+        i_num = atoi(pt_comRec);
+        if(i_num == 0){
+            i_LED_Active = Debug_LED_Disable; // Disable
+            led1=led2=led3=led4=0;
+        }
+       else if(i_num == 1){
+            i_LED_Active = Debug_LED_Active; // Debug LED Active
+            led1=led2=led3=led4=0;
+        }
+         else{
+            b_CommadERR = 1;
+        }
+    }
+    return(b_CommadERR);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+
+
+//------------------------------------------------------------------------------//
+//------------------------------------------------------------------------------//
+//-----    Serial tx/rx Communication  
+//------------------------------------------------------------------------------//
+// Copy tx line buffer to large tx buffer for tx interrupt routine
+void send_line() {
+    int i;
+    char temp_char;
+    bool empty;
+    i = 0;
+// Start Critical Section - don't interrupt while changing global buffer variables
+    NVIC_DisableIRQ(UART1_IRQn);
+    empty = (tx_in == tx_out);
+    while ((i==0) || (tx_line[i-1] != '\n')) {
+// Wait if buffer full
+        if (((tx_in + 1) % ser_buffer_size) == tx_out) {
+// End Critical Section - need to let interrupt routine empty buffer by sending
+            NVIC_EnableIRQ(UART1_IRQn);
+            while (((tx_in + 1) % ser_buffer_size) == tx_out) {
+            }
+// Start Critical Section - don't interrupt while changing global buffer variables
+            NVIC_DisableIRQ(UART1_IRQn);
+        }
+        tx_buffer[tx_in] = tx_line[i];
+        i++;
+        tx_in = (tx_in + 1) % ser_buffer_size;
+    }
+    if (device.writeable() && (empty)) {
+        temp_char = tx_buffer[tx_out];
+        tx_out = (tx_out + 1) % ser_buffer_size;
+// Send first character to start tx interrupts, if stopped
+        device.putc(temp_char);
+    }
+// End Critical Section
+    NVIC_EnableIRQ(UART1_IRQn);
+    return;
+}
+
+// Read a line from the large rx buffer from rx interrupt routine
+// 2013.08.08 H.Tsunemoto 
+// Append Return Chear Number
+int read_line(){
+//void read_line() {
+    int i;
+    i = 0;
+    // Start Critical Section - don't interrupt while changing global buffer variables
+    NVIC_DisableIRQ(UART1_IRQn);
+     while(rx_in != rx_out){
+        rx_line[i] = rx_buffer[rx_out];
+         rx_out = (rx_out + 1) % ser_buffer_size;
+        if((rx_line[i] == '\r') || (rx_line[i] == '\n')){
+            break;
+       }
+             i++;
+
+    }
+    rx_line[i] = 0;
+// End Critical Section
+    NVIC_EnableIRQ(UART1_IRQn);
+    return(i);
+}
+
+// Interupt Routine to read in data from serial port
+void Rx_interrupt() {
+ //   led1=1;
+// Loop just in case more than one character is in UART's receive FIFO buffer
+// Stop if buffer full
+    while ((device.readable()) || (((rx_in + 1) % ser_buffer_size) == rx_out)) {
+        rx_buffer[rx_in] = device.getc();
+// Uncomment to Echo to USB serial to watch data flow
+//        monitor_device.putc(rx_buffer[rx_in]);
+        //--------  2016.05.23 Tsunemoto --------------//
+        //--------  小文字 => 大文字 変換-------------//
+        if((rx_buffer[rx_in] >= 'a') && (rx_buffer[rx_in] <= 'z')){
+            rx_buffer[rx_in] -= 0x20;  // 'a'0x62 => 'A'0x42
+        }
+        //------- 2013.08.08 Tsunemoto ------------//
+        // -- Char CR Rec Counter ----//
+        if((rx_buffer[rx_in]== '\r') || (rx_buffer[rx_in]== '\n')){
+           //led2 = 1;
+           rx_cr_Rec ++;
+        }
+        //----------------------------//
+        rx_in = (rx_in + 1) % ser_buffer_size;
+    }
+//    led1=0;
+    return;
+}
+
+// Interupt Routine to write out data to serial port
+void Tx_interrupt() {
+    //led2=1;
+// Loop to fill more than one character in UART's transmit FIFO buffer
+// Stop if buffer empty
+    while ((device.writeable()) && (tx_in != tx_out)) {
+        device.putc(tx_buffer[tx_out]);
+        tx_out = (tx_out + 1) % ser_buffer_size;
+        if(i_LED_Active == Debug_LED_Active){
+                led1 = 1;
+                led1 = 0;
+        }
+    }
+    //led2=0;
+    return;
+}
+//----------------------------------------------------------------------------------//