Переглянути джерело

Реализовано управление в соответствии с ТЗ. Скорректированны настройки моделей и серийных номеров, а так же описание предоставляемое устройством в систему по USB.

ChStepan 6 місяців тому
батько
коміт
25e14c7762

+ 1 - 1
App/nfm/nfm_base.c

@@ -36,7 +36,7 @@ const static char manufacturerId[] =  "CMT";
 static char g_firmwareId[16] = "0.1/01";
 
 // NFM model name
-static char g_modelName[16] = "ME208-18A";
+static char g_modelName[16] = "MK207-04H";
 
 // Serial Number String
 static char g_serialNumber[9] = "00000001";

+ 7 - 1
App/nfm/nfm_base_keyprofiles.c

@@ -51,4 +51,10 @@
                       ePE2P16TInputPortStates
                      );
         
-
+    MAKE_PROFILE_NFM( nf_profile_PAK_LEMZ,
+                      "PortsExtender",
+                      2,
+                      10,
+                      eTerminatePortState,
+                      ePE2P16TInputPortStates
+                     );

+ 1 - 0
App/nfm/nfm_base_keyprofiles.h

@@ -5,5 +5,6 @@
     extern const sNFMControlSwitchProfile_t nf_profile_NFM;
     extern const sNFMControlSwitchProfile_t nf_profile_SWB_16;
     extern const sNFMControlSwitchProfile_t nf_profile_SWB_8;
+    extern const sNFMControlSwitchProfile_t nf_profile_PAK_LEMZ;
     // -------------------------------------------------------------------------
 #endif

+ 6 - 0
App/nfm/nfm_base_model.c

@@ -25,6 +25,12 @@ const sNFMModel_t aNFMModels[] =
         .memProfile = &memProfile_SW
       },
       
+      { .deviceId  = eModel_PAK_LEMZ,
+        .modelName = "MK207-04H",
+        .nfProfile = &nf_profile_PAK_LEMZ,
+        .memProfile = &memProfile_SW
+      },      
+            
       { .deviceId  = eModel_undefined, 
         .modelName = "Unknown",
         .nfProfile = NULL, // undefined key-switch profile

+ 1 - 0
App/nfm/nfm_base_model.h

@@ -28,6 +28,7 @@
        eModel_SWB_16 = 21,                   // PE2P16Ta
        eModel_SWB_16M = 22,                  // ME216-18A 
        eModel_SWB_8M = 23,                   // ME208-18A
+       eModel_PAK_LEMZ = 24,                 // MK207-04H (PAK-LEMZ)
        eModel_undefined = 255,
     }
     eNFMModel_t;

+ 57 - 32
App/scpi/CommandHandlers/power_switch.c

@@ -4,6 +4,7 @@
 #define SCPI_ARGS_N_Q 0
 #include "app/scpi/scpi_handler.h"
 #include "app/control_table/control_table.h"
+#include "drivers/switchboard_control/switchboard_control.h"
 
 // -----
 // @argTypesCommand
@@ -16,14 +17,17 @@ DECLARE_SCPI_ARGS_C( eScpiArg_Numeric, eScpiArg_Numeric );
 // Supported arguments: 0
 DECLARE_SCPI_ARGS_Q();
 
-DECLARE_ARGUMENT_NUMERIC_VALUES_I32(AllowedValues_PortNumber, 0, 16);
+DECLARE_ARGUMENT_NUMERIC_VALUES_I32(AllowedValues_SW_Number, 1, 10);
+DECLARE_ARGUMENT_NUMERIC_VALUES_I32(AllowedValues_SW_State, 0, 3);
 
-const uint8_t fsqvbl_CommandHandlerPortSet    = 1;  // CTRL:PORT
+const uint8_t fsqvbl_CommandHandlerSwCtrl     = 1;  // CTRL:SW
 const uint8_t fsqvbl_CommandHandlerMeasStart  = 2;  // MEAS:START
 const uint8_t fsqvbl_CommandHandlerMeasStop   = 3;  // MEAS:STOP
 const uint8_t fsqvbl_CommandHandlerMeasCont   = 4;  // MEAS:CONTinue
 const uint8_t fsqvbl_CommandHandlerMeasMode   = 5;  // MEAS:MODE
 
+static uint16_t sw_cmd_reg = 0x0000;
+
 #include "app/scpi/commandHandlers/power_switch.h"
 #include "app/nfm/nfm_base.h"
 
@@ -63,6 +67,41 @@ static void fsql_CommandHandlerCtrl_Switch_Group( const struct fFSeqEntry_t * th
 {
 }
 
+// Set bit into possition func
+uint16_t set_bit(uint16_t cmd_register, uint16_t SW_Number, uint16_t SW_State) {
+   
+  unsigned char bit_position=0;
+  
+  switch (SW_Number)
+  {
+  case 1: {bit_position = 1;} break;
+  case 2: {bit_position = 9;} break;
+  case 3: {bit_position = 2;} break;
+  case 4: {bit_position = 10;} break;
+  case 5: {bit_position = 3;} break;
+  case 6: {bit_position = 4;} break;
+  case 7: {bit_position = 12;} break;
+  case 8: {bit_position = 13;} break;
+  case 9: {bit_position = 14;} break;
+  case 10: {bit_position = 15;} break;
+  }
+
+  if (SW_Number == 4)
+  {      // clear control bits positions
+        cmd_register &= ~(3 << bit_position);
+        // set control bits positions
+        cmd_register  |= (SW_State << bit_position);
+  }
+  else
+  {      // reset bit in possition
+        cmd_register &= ~(1 << bit_position);
+        cmd_register  |= ((SW_State & 1) << bit_position);
+  } 
+  
+  return cmd_register;
+}
+
+
 static const struct fFSeqEntry_t * fsqf_CommandHandlerCtrl_Switch_Group( const struct fFSeqEntry_t * this, 
                                                                          tFSeqCtx_t ctx, 
                                                                           const struct fFSeqEntry_t * * pDeferredNext )
@@ -83,39 +122,26 @@ static const struct fFSeqEntry_t * fsqf_CommandHandlerCtrl_Switch_Group( const s
             else if( ! common_ctx->isQuery )
             {
                common_ctx->status = eProgramDataIllegalArgument;  // forward set, illegal parameter value, caller should generate error message
-               if( common_ctx->handler_ctx == &fsqvbl_CommandHandlerPortSet )
+               if( common_ctx->handler_ctx == &fsqvbl_CommandHandlerSwCtrl )
                {
                     // Parse first argument
-                    const sNumericEntry_t * ne = SCPI_PROCESS_ARGUMENT_NUMERIC(common_ctx, &AllowedValues_PortNumber, 0);
+                    const sNumericEntry_t * ne = SCPI_PROCESS_ARGUMENT_NUMERIC(common_ctx, &AllowedValues_SW_Number, 0);
                     if( ScpiNumericSuccess != ne->error ) break;
-                    uint16_t port1 = ne->Value.demicalInteger;
+                    uint16_t swNumber = ne->Value.demicalInteger;
                     
                     // Parse second argument
-                    ne = SCPI_PROCESS_ARGUMENT_NUMERIC(common_ctx, &AllowedValues_PortNumber, 1);
+                    ne = SCPI_PROCESS_ARGUMENT_NUMERIC(common_ctx, &AllowedValues_SW_State, 1);
                     if( ScpiNumericSuccess != ne->error ) break;
-                    uint16_t port2 = ne->Value.demicalInteger;
+                    uint16_t swState = ne->Value.demicalInteger;
                     
-                    if((port1 || port2) && (port1 == port2)) break;
+                    sw_cmd_reg = set_bit(sw_cmd_reg, swNumber, swState);
+                        
+                    HAL_GPIO_WritePin( GPIOA, GPIO_PIN_8, GPIO_PIN_SET);  // Turn OFF active Reset signal on external shift REG that was set during powerup
                     
-                    if( port1 > NFMClass->properties.allowedOutputPorts || port2 > NFMClass->properties.allowedOutputPorts)
-                    {
-                        common_ctx->status = eProgramDataRuntimeError;
-                        break;
-                    }
-
-                    if( !NFMClass->methods.portMethods.setPortState(eNFMPort_1, port1) || !NFMClass->methods.portMethods.setPortState(eNFMPort_2, port2) )
-                    {
-                        common_ctx->status = eProgramDataRuntimeError;
-                        break;
-                    }
-                    
-                    sTableTablePoint_t portCommutation = 
-                    {
-                        .port1 = NFMClass->methods.portMethods.getPortState(eNFMPort_1),
-                        .port2 = NFMClass->methods.portMethods.getPortState(eNFMPort_2)
-                    };
-                    
-                    ControlHandle.PortSet(portCommutation);
+                    SBHandle.ClrNSS();
+                    SBHandle.Transmit(((uint8_t*)&(sw_cmd_reg)), sizeof(uint8_t));
+                    SBHandle.SetNSS();
+                   
                     
                     common_ctx->status = eProgramDataDone;
                }
@@ -134,12 +160,9 @@ static const struct fFSeqEntry_t * fsqf_CommandHandlerCtrl_Switch_Group( const s
              if( common_ctx->MeasAndSwitch.idx == 0 ) // first reading
              {
                  size_t length = 0;                 
-                 if( common_ctx->handler_ctx == &fsqvbl_CommandHandlerPortSet )
+                 if( common_ctx->handler_ctx == &fsqvbl_CommandHandlerSwCtrl )
                  {
-                     sTableTablePoint_t portState = ControlHandle.PortRead();
-                     NFMClass->methods.portMethods.setPortState(eNFMPort_1, portState.port1);
-                     NFMClass->methods.portMethods.setPortState(eNFMPort_2, portState.port2);
-                     length = _snprintf( common_ctx->tempBuffer, sizeof(common_ctx->tempBuffer), "%d, %d", portState.port1, portState.port2);
+                     length = _snprintf( common_ctx->tempBuffer, sizeof(common_ctx->tempBuffer), "%d", sw_cmd_reg);
                  }
                  else if( common_ctx->handler_ctx == &fsqvbl_CommandHandlerMeasStart )
                  {
@@ -164,6 +187,8 @@ static const struct fFSeqEntry_t * fsqf_CommandHandlerCtrl_Switch_Group( const s
                          length = _snprintf( common_ctx->tempBuffer, sizeof(common_ctx->tempBuffer), "%s", res ? "TABLE\n" : "MANUAL\n");
                      }
                  }
+                 
+
 				 
                  if( length > 0 )
                  {

+ 1 - 1
App/scpi/CommandHandlers/power_switch.h

@@ -5,7 +5,7 @@
 
     extern const fFSeqVTable_t fsqvbl_CommandHandlerCtrl_group;
 
-    extern const uint8_t fsqvbl_CommandHandlerPortSet;   // CTRL:PORT1
+    extern const uint8_t fsqvbl_CommandHandlerSwCtrl;   // CTRL:SW
     extern const uint8_t fsqvbl_CommandHandlerMeasStart; // MEAS:START
     extern const uint8_t fsqvbl_CommandHandlerMeasStop;  // MEAS:STOP
     extern const uint8_t fsqvbl_CommandHandlerMeasCont;  // MEAS:CONTinue

+ 5 - 5
App/scpi/scpi_commands.c

@@ -674,10 +674,10 @@ static const sScpiCommandHandlerEntry_t CommandEntryTableGet = {
 };
 
 // @CommandEntryPORT
-// CTRL:SET:PORT
+// CTRL:SET:SW
 static const sScpiCommandHandlerEntry_t CommandEntryPortSet = {
-    .entry = { &fsqvbl_CommandHandlerCtrl_group }, // connect the CTRL:PORT
-    .ctx = &fsqvbl_CommandHandlerPortSet // grouped handler context
+    .entry = { &fsqvbl_CommandHandlerCtrl_group }, // connect the CTRL:SW
+    .ctx = &fsqvbl_CommandHandlerSwCtrl // grouped handler context
 };
 
 // @CommandEntryMeasStart
@@ -822,8 +822,8 @@ static const sScpiCommandHandlerEntry_t CommandEntryServiceReboot = {
 //};
 
 static const sTreeList_t NodeEntry_CONTrol[] = {
-    // create ':CTRL:PORT' query, link @CommandEntryPortSet
-    DECLARE_TREE_LIST_CLEAF( "PORT", &CommandEntryPortSet ),
+    // create ':CTRL:SW' query, link @CommandEntryPortSet
+    DECLARE_TREE_LIST_CLEAF( "SW", &CommandEntryPortSet ),
     DECLARE_TREE_LIST_LAST() // end-of-list
 };
 

+ 1 - 1
App/usb/usbd_desc.c

@@ -46,7 +46,7 @@ static const uint8_t USBD_MANUFACTURER_STRING[] = { 68, USB_DESC_TYPE_STRING,
 #endif
 
 static const uint8_t USBD_PRODUCT_STRING_FS[] = { 38, USB_DESC_TYPE_STRING, 
-  'M', 0,'E', 0,'2', 0,'0', 0,'8', 0,'-', 0,'1', 0, '8', 0, 'A', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                         
+  'M', 0,'K', 0,'2', 0,'0', 0,'7', 0,'-', 0,'0', 0, '4', 0, 'H', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                         
 };
 
 #if CONFIG_NFMBASECLASS

+ 2 - 2
Core/config_pins.h

@@ -69,12 +69,12 @@
   // Power management Pin
   #define CONFIG_PIN__INPTRG                         GPIO_PIN_8
   #define CONFIG_PIN__INPTRG_1                       GPIO_PIN_9
-  #define CONFIG_PIN__5VRF_EN                        GPIO_PIN_3
+  #define CONFIG_PIN__EXT_REG_MR                     GPIO_PIN_8
   #define CONFIG_PIN__INPTRG_EN                      GPIO_PIN_10
 
   #define CONFIG_PORT__INPTRG                        GPIOA
   #define CONFIG_PORT__INPTRG_1                      GPIOA
-  #define CONFIG_PORT__5VRF_EN                       GPIOA   
+  #define CONFIG_PORT__EXT_REG_MR                    GPIOA   
   #define CONFIG_PORT__INPTRG_EN                     GPIOA
   #define CONFIG_ADC_CHANNEL_POWER                   ADC_CHANNEL_1
   //============================================================================

+ 1 - 1
Core/main.c

@@ -610,7 +610,7 @@ int main(void)
   bool l_RebootRequest = false;
   #endif
   
-  HAL_GPIO_WritePin( GPIOA, GPIO_PIN_3, GPIO_PIN_SET);  //POWER ON FPGA BOARD
+//  
   
   while (1)
   {

+ 8 - 8
Drivers/power_management/power_management.c

@@ -11,7 +11,7 @@ static void PM_DeInit();
 static void INPTRG( bool state );
 static void INPTRG_1( bool state );
 static void INPTRG_EN( bool state );
-static void VRF_EN_5( bool state );
+static void EXT_REG_MR( bool state );
  
  const PM_Handle_t PMHandle = {
 
@@ -20,7 +20,7 @@ static void VRF_EN_5( bool state );
     INPTRG,
     INPTRG_1,
     INPTRG_EN,
-    VRF_EN_5
+    EXT_REG_MR
  };
 
 static inline void INPTRG( bool state )
@@ -38,9 +38,9 @@ static inline void INPTRG_EN( bool state )
     HAL_GPIO_WritePin( CONFIG_PORT__INPTRG_EN, CONFIG_PIN__INPTRG_EN, (state)?GPIO_PIN_SET:GPIO_PIN_RESET );
 }
 
-static inline void VRF_EN_5( bool state )
+static inline void EXT_REG_MR( bool state )
 {
-    HAL_GPIO_WritePin( CONFIG_PORT__5VRF_EN, CONFIG_PIN__5VRF_EN, (state)?GPIO_PIN_SET:GPIO_PIN_RESET );
+    HAL_GPIO_WritePin( CONFIG_PORT__EXT_REG_MR, CONFIG_PIN__EXT_REG_MR, (state)?GPIO_PIN_SET:GPIO_PIN_RESET );
 }
  
  static bool PM_Init()
@@ -55,15 +55,15 @@ static inline void VRF_EN_5( bool state )
    HAL_GPIO_Init(CONFIG_PORT__INPTRG, &GPIO_CTRL);
    
    GPIO_InitTypeDef GPIO_CTRL_PWR = {0};
-   GPIO_CTRL_PWR.Pin = CONFIG_PIN__5VRF_EN | CONFIG_PIN__INPTRG_EN; 
+   GPIO_CTRL_PWR.Pin = CONFIG_PIN__EXT_REG_MR | CONFIG_PIN__INPTRG_EN; 
    GPIO_CTRL_PWR.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_CTRL_PWR.Pull = GPIO_PULLUP;
    GPIO_CTRL_PWR.Speed = GPIO_SPEED_FREQ_MEDIUM;        
-   HAL_GPIO_Init(CONFIG_PORT__5VRF_EN, &GPIO_CTRL_PWR);
+   HAL_GPIO_Init(CONFIG_PORT__EXT_REG_MR, &GPIO_CTRL_PWR);
    
-   VRF_EN_5(false); // Âûêëþ÷àåì ïèòàíèå íà ïëàòó óïðàâëåíèÿ (FPGA)
+   //VRF_EN_5(false); // Âûêëþ÷àåì ïèòàíèå íà ïëàòó óïðàâëåíèÿ (FPGA)
    INPTRG_EN(true); // Çàïðåò òðèããåðà îò VNA
-   //VRF_EN_5(true);  // Âêëþ÷àåì ïèòàíèå íà ïëàòó óïðàâëåíèÿ (FPGA) ïîñëå çàïðåòà ðàáîòû òðèããåðîâ
+   EXT_REG_MR(false);  // PowerUP with active RESET signal on external shift REG
    EI();
 
    // Ïîñëå èíèöèàëèçàöèè íåîáõîäèìà çàäåðæêà 0.5 ñåêóíä!!!

+ 1 - 1
Drivers/power_management/power_management.h

@@ -11,7 +11,7 @@
       void (*INPTRG)( bool state );
       void (*INPTRG_1)( bool state );
       void (*INPTRG_EN)( bool state );
-      void (*VRF_EN_5)( bool state );
+      void (*EXT_REG_MR)( bool state );
   }
   PM_Handle_t;
 

+ 1 - 1
Drivers/switchboard_control/switchboard_control.c

@@ -74,7 +74,7 @@ static void SB_TransmitReceive( uint8_t * pTxBuf, uint8_t * pRxBuf, size_t size
    #endif
    handle_spi.Init.Mode = SPI_MODE_MASTER;
    handle_spi.Init.Direction = SPI_DIRECTION_2LINES;
-   handle_spi.Init.DataSize = SPI_DATASIZE_8BIT;
+   handle_spi.Init.DataSize = SPI_DATASIZE_16BIT;
    handle_spi.Init.CLKPolarity = SPI_POLARITY_LOW;
    handle_spi.Init.CLKPhase = SPI_PHASE_1EDGE;
    handle_spi.Init.NSS = SPI_NSS_SOFT;

+ 1 - 1
Drivers/usb/Class/UsbTmc/usbd_usbtmc_desc.c

@@ -223,7 +223,7 @@ static const uint8_t * USBD_USBTMC_GetManufacturerStrDescriptor(USBD_SpeedTypeDe
 }
 
 static const uint8_t USBD_USBTMC_PRODUCT_STRING[] = { 38, USB_DESC_TYPE_STRING, 
-  'M', 0,'E', 0,'2', 0,'0', 0,'8', 0,'-', 0,'1', 0, '8', 0, 'A', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                      
+  'M', 0,'K', 0,'2', 0,'0', 0,'7', 0,'-', 0,'0', 0, '4', 0, 'H', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                         
 };
 
 /**

+ 2 - 1
Drivers/usb/Class/Vendor/usbd_vendor_desc.c

@@ -269,8 +269,9 @@ static const uint8_t * USBD_VENDOR_GetManufacturerStrDescriptor(USBD_SpeedTypeDe
 }
 
 static const uint8_t USBD_VENDOR_PRODUCT_STRING[] = { 38, USB_DESC_TYPE_STRING, 
-  'M', 0,'E', 0,'2', 0,'0', 0,'8', 0,'-', 0,'1', 0, '8', 0, 'A', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                      
+  'M', 0,'K', 0,'2', 0,'0', 0,'7', 0,'-', 0,'0', 0, '4', 0, 'H', 0, ' ', 0,  ' ', 0, ' ', 0, ' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,' ', 0,                         
 };
+
 /**
   * @brief  Return the product string descriptor
   * @param  speed : Current device speed