1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
void tud_mount_cb(void) { ESP_LOGI(TAG, "USB Mounted"); }
void tud_umount_cb(void) { ESP_LOGI(TAG, "USB Unmounted"); }
void tud_suspend_cb(bool remote_wakeup_en) { ESP_LOGI(TAG, "USB Suspend"); }
void tud_resume_cb(void) { ESP_LOGI(TAG, "USB Resume"); }
bool tud_usbtmc_initiate_abort_bulk_in_cb(uint8_t* tmcResult) { ESP_LOGD(TAG, "bulk in request is aborting"); *tmcResult = USBTMC_STATUS_SUCCESS; return true; }
bool tud_usbtmc_check_abort_bulk_in_cb(usbtmc_check_abort_bulk_rsp_t* rsp) { ESP_LOGD(TAG, "bulk in request is aborted"); tud_usbtmc_start_bus_read(); return true; }
bool tud_usbtmc_initiate_abort_bulk_out_cb(uint8_t* tmcResult) { ESP_LOGD(TAG, "bulk out request is aborting"); *tmcResult = USBTMC_STATUS_SUCCESS; return true; } bool tud_usbtmc_check_abort_bulk_out_cb(usbtmc_check_abort_bulk_rsp_t* rsp) { ESP_LOGD(TAG, "bulk out request is aborted"); tud_usbtmc_start_bus_read(); return true; } void tud_usbtmc_bulkIn_clearFeature_cb(void) { }
void tud_usbtmc_bulkOut_clearFeature_cb(void) { tud_usbtmc_start_bus_read(); }
bool tud_usbtmc_initiate_clear_cb(uint8_t* tmcResult) { ESP_LOGD(TAG, "device status is clearing"); *tmcResult = USBTMC_STATUS_SUCCESS; return true; }
bool tud_usbtmc_check_clear_cb(usbtmc_get_clear_status_rsp_t* rsp) { ESP_LOGD(TAG, "device status is cleared"); rsp->USBTMC_status = USBTMC_STATUS_SUCCESS; rsp->bmClear.BulkInFifoBytes = 0u; return true; }
uint8_t tud_usbtmc_get_stb_cb(uint8_t* tmcResult) { return SCPI_RegGet(&scpi_context, SCPI_REG_STB); }
bool tud_usbtmc_msg_trigger_cb(usbtmc_msg_generic_t* msg) { (void)msg; SCPI_Control(&scpi_context, SCPI_CTRL_GET, 0); return true; }
bool tud_usbtmc_indicator_pulse_cb(tusb_control_request_t const* msg, uint8_t* tmcResult) { (void)msg; *tmcResult = USBTMC_STATUS_SUCCESS; return true; }
bool tud_usbtmc_msg_data_cb(void* data, size_t len, bool transfer_complete) { ESP_LOGD(TAG, "received %u bytes, transfer_complete=%d", (unsigned)len, transfer_complete); SCPI_Input(&scpi_context, data, len); tud_usbtmc_start_bus_read(); return true; }
bool tud_usbtmc_msgBulkIn_request_cb(usbtmc_msg_request_dev_dep_in const* request) { uint8_t stb = SCPI_RegGet(&scpi_context, SCPI_REG_STB);
if (stb & STB_MAV) { return tud_usbtmc_transmit_dev_msg_data( message_out_buffer, message_out_buffer_ptr - message_out_buffer, true, false); } else { return false; } }
size_t SCPI_Write(scpi_t* context, const char* data, size_t len) { (void)context; if (SCPI_RegGet(&scpi_context, SCPI_REG_STB) & STB_MAV) { return 0; } if ((len + (size_t)(message_out_buffer_ptr - message_out_buffer)) > MESSAGE_OUT_BUFFER_SIZE) { ESP_LOGE(TAG, "SCPI_Write is overflowing the buffer"); return 0; } memcpy(message_out_buffer_ptr, data, len); message_out_buffer_ptr += len; return len; }
scpi_result_t SCPI_Flush(scpi_t* context) { (void)context; SCPI_RegSetBits(&scpi_context, SCPI_REG_STB, STB_MAV); return SCPI_RES_OK; }
int SCPI_Error(scpi_t* context, int_fast16_t err) { (void)context;
ESP_LOGE(TAG, "**ERROR: %d, \"%s\"", (int16_t)err, SCPI_ErrorTranslate(err)); return 0; }
scpi_result_t SCPI_Control(scpi_t* context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val) { (void)context;
if (SCPI_CTRL_SRQ == ctrl) { ESP_LOGI(TAG, "**SRQ: 0x%X (%d)", val, val); } else if (ctrl == SCPI_CTRL_LLO ctrl == SCPI_CTRL_SDC) { ESP_LOGI(TAG, "device cleared"); } else { ESP_LOGI(TAG, "**CTRL %02x: 0x%X (%d)", ctrl, val, val); } return SCPI_RES_OK; }
scpi_result_t SCPI_Reset(scpi_t* context) { (void)context;
ESP_LOGI(TAG, "**Reset"); return SCPI_RES_OK; }
|