aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/usrp1/usrp1_ctrl.hpp
blob: 8ccfacab70da7a79fec4234adf0c822969a69ba2 (plain)
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
//
// Copyright 2010 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
//

#ifndef INCLUDED_USRP_CTRL_HPP
#define INCLUDED_USRP_CTRL_HPP

#include <uhd/transport/usb_control.hpp> 
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>

class usrp_ctrl : boost::noncopyable{
public:
    typedef boost::shared_ptr<usrp_ctrl> sptr;

    /*!
     * Make a usrp control object from a control transport
     * \param ctrl_transport a USB control transport
     * \return a new usrp control object
     */
    static sptr make(uhd::transport::usb_control::sptr ctrl_transport);

    //! Call init after the fpga is loaded
    virtual void usrp_init(void) = 0;

    /*!
     * Load firmware in Intel HEX Format onto device 
     * \param filename name of firmware file
     * \param force reload firmware if already loaded
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_load_firmware(std::string filename,
                                   bool force = false) = 0;

    /*!
     * Load fpga file onto usrp 
     * \param filename name of fpga image 
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_load_fpga(std::string filename) = 0;

    /*!
     * Load USB descriptor file in Intel HEX format into EEPROM
     * \param filename name of EEPROM image 
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_load_eeprom(std::string filestring) = 0;

    /*!
     * Set led usrp 
     * \param led_num which LED to control (0 or 1)
     * \param on turn LED on or off
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_set_led(int led_num, bool on) = 0;

    /*!
     * Get firmware hash 
     * \param hash a size_t hash value
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_get_firmware_hash(size_t &hash) = 0;

    /*!
     * Set firmware hash 
     * \param hash a size_t hash value
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_set_firmware_hash(size_t hash) = 0;
                              
    /*!
     * Get fpga hash 
     * \param hash a size_t hash value
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_get_fpga_hash(size_t &hash) = 0;

    /*!
     * Set fpga hash 
     * \param hash a size_t hash value
     * \return 0 on success, error code otherwise
     */
    virtual int usrp_set_fpga_hash(size_t hash) = 0;

    /*!
     * Submit an IN transfer 
     * \param request device specific request 
     * \param value device specific field
     * \param index device specific field
     * \param buff buffer to place data
     * \return number of bytes read or error 
     */
    virtual int usrp_control_read(boost::uint8_t request,
                                  boost::uint16_t value,
                                  boost::uint16_t index,
                                  unsigned char *buff,
                                  boost::uint16_t length) = 0;

    /*!
     * Submit an OUT transfer 
     * \param request device specific request 
     * \param value device specific field
     * \param index device specific field
     * \param buff buffer of data to be sent 
     * \return number of bytes written or error 
     */
    virtual int usrp_control_write(boost::uint8_t request,
                                   boost::uint16_t value,
                                   boost::uint16_t index,
                                   unsigned char *buff,
                                   boost::uint16_t length) = 0;

    /*!
     * Perform an I2C write
     * \param i2c_addr I2C device address
     * \param buf data to be written 
     * \param len length of data in bytes
     * \return number of bytes written or error 
     */

    virtual int usrp_i2c_write(boost::uint16_t i2c_addr,
                               unsigned char *buf, 
                               boost::uint16_t len) = 0;

    /*!
     * Perform an I2C read
     * \param i2c_addr I2C device address
     * \param buf data to be read 
     * \param len length of data in bytes
     * \return number of bytes read or error 
     */

    virtual int usrp_i2c_read(boost::uint16_t i2c_addr,
                               unsigned char *buf, 
                               boost::uint16_t len) = 0;

};

#endif /* INCLUDED_USRP_CTRL_HPP */