| | |
| | | } |
| | | |
| | | /** |
| | | * Update latching event register value based on bit transitions from 0 -> 1 |
| | | * in the condition register |
| | | * @param context |
| | | * @param condReg - condition register name |
| | | * @param eventReg - event register name |
| | | */ |
| | | static void regUpdateEvent(scpi_t * context, scpi_reg_val_t oldCondVal, scpi_reg_val_t newCondVal, scpi_reg_name_t eventReg) { |
| | | SCPI_RegSet(context, eventReg, ((oldCondVal ^ newCondVal) & newCondVal) | SCPI_RegGet(context, eventReg)); |
| | | } |
| | | |
| | | /** |
| | | * Update STB register according to value and its mask register |
| | | * @param context |
| | | * @param val value of register |
| | |
| | | * @return register value |
| | | */ |
| | | scpi_reg_val_t SCPI_RegGet(scpi_t * context, scpi_reg_name_t name) { |
| | | if ((name < SCPI_REG_COUNT) && (context->registers != NULL)) { |
| | | if ((name < SCPI_REG_COUNT) && context) { |
| | | return context->registers[name]; |
| | | } else { |
| | | return 0; |
| | |
| | | scpi_reg_val_t mask; |
| | | scpi_reg_val_t old_val; |
| | | |
| | | if ((name >= SCPI_REG_COUNT) || (context->registers == NULL)) { |
| | | if ((name >= SCPI_REG_COUNT) || (context == NULL)) { |
| | | return; |
| | | } |
| | | |
| | |
| | | case SCPI_REG_QUESE: |
| | | regUpdate(context, SCPI_REG_QUES); |
| | | break; |
| | | case SCPI_REG_QUESC: |
| | | regUpdateEvent(context, old_val, val, SCPI_REG_QUES); |
| | | break; |
| | | case SCPI_REG_OPER: |
| | | regUpdateSTB(context, val, SCPI_REG_OPERE, STB_OPS); |
| | | break; |
| | | case SCPI_REG_OPERE: |
| | | regUpdate(context, SCPI_REG_OPER); |
| | | break; |
| | | case SCPI_REG_OPERC: |
| | | regUpdateEvent(context, old_val, val, SCPI_REG_OPER); |
| | | break; |
| | | |
| | | |
| | | case SCPI_REG_COUNT: |