initial commit, reads dev id

Committer:
phonemacro
Date:
Thu Aug 16 19:53:01 2018 +0000
Revision:
4:6ec3bc44f055
Parent:
2:11e0b5b86e1e
Child:
5:1f7b8cb07e26
updated to transform output

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phonemacro 0:77ee0ceb503a 1 /*******************************************************************************
phonemacro 0:77ee0ceb503a 2 * Author: Ihsan Mert Ozcelik, Ihsan.Ozcelik@maximintegrated.com
phonemacro 0:77ee0ceb503a 3 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
phonemacro 0:77ee0ceb503a 4 *
phonemacro 0:77ee0ceb503a 5 * Permission is hereby granted, free of charge, to any person obtaining a
phonemacro 0:77ee0ceb503a 6 * copy of this software and associated documentation files (the "Software"),
phonemacro 0:77ee0ceb503a 7 * to deal in the Software without restriction, including without limitation
phonemacro 0:77ee0ceb503a 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
phonemacro 0:77ee0ceb503a 9 * and/or sell copies of the Software, and to permit persons to whom the
phonemacro 0:77ee0ceb503a 10 * Software is furnished to do so, subject to the following conditions:
phonemacro 0:77ee0ceb503a 11 *
phonemacro 0:77ee0ceb503a 12 * The above copyright notice and this permission notice shall be included
phonemacro 0:77ee0ceb503a 13 * in all copies or substantial portions of the Software.
phonemacro 0:77ee0ceb503a 14 *
phonemacro 0:77ee0ceb503a 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
phonemacro 0:77ee0ceb503a 16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
phonemacro 0:77ee0ceb503a 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
phonemacro 0:77ee0ceb503a 18 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
phonemacro 0:77ee0ceb503a 19 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
phonemacro 0:77ee0ceb503a 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
phonemacro 0:77ee0ceb503a 21 * OTHER DEALINGS IN THE SOFTWARE.
phonemacro 0:77ee0ceb503a 22 *
phonemacro 0:77ee0ceb503a 23 * Except as contained in this notice, the name of Maxim Integrated
phonemacro 0:77ee0ceb503a 24 * Products, Inc. shall not be used except as stated in the Maxim Integrated
phonemacro 0:77ee0ceb503a 25 * Products, Inc. Branding Policy.
phonemacro 0:77ee0ceb503a 26 *
phonemacro 0:77ee0ceb503a 27 * The mere transfer of this software does not imply any licenses
phonemacro 0:77ee0ceb503a 28 * of trade secrets, proprietary technology, copyrights, patents,
phonemacro 0:77ee0ceb503a 29 * trademarks, maskwork rights, or any other form of intellectual
phonemacro 0:77ee0ceb503a 30 * property whatsoever. Maxim Integrated Products, Inc. retains all
phonemacro 0:77ee0ceb503a 31 * ownership rights.
phonemacro 0:77ee0ceb503a 32 *******************************************************************************
phonemacro 0:77ee0ceb503a 33 */
phonemacro 0:77ee0ceb503a 34 #include "MAX8614X.h"
phonemacro 0:77ee0ceb503a 35
phonemacro 0:77ee0ceb503a 36 #define pr_err(fmt, args...) if(1) printf(fmt " (%s:%d)\n", ##args, __func__, __LINE__)
phonemacro 0:77ee0ceb503a 37 #define pr_info(fmt, args...) if(1) printf(fmt " (%s:%d)\n", ##args, __func__, __LINE__)
phonemacro 0:77ee0ceb503a 38 #define pr_debug(fmt, args...) if(0) printf(fmt " (%s:%d)\n", ##args, __func__, __LINE__)
phonemacro 0:77ee0ceb503a 39
phonemacro 0:77ee0ceb503a 40 #define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
phonemacro 0:77ee0ceb503a 41
phonemacro 0:77ee0ceb503a 42 MAX8614X::MAX8614X(SPI &spiBus, DigitalOut &cs, PinName pin)
phonemacro 1:7ae9b934ee55 43 :m_ir(pin), m_spiBus(spiBus), m_cs(cs)
phonemacro 0:77ee0ceb503a 44 {
phonemacro 0:77ee0ceb503a 45 m_cs = 1;
phonemacro 0:77ee0ceb503a 46 }
phonemacro 0:77ee0ceb503a 47
phonemacro 4:6ec3bc44f055 48 int MAX8614X::init()
phonemacro 4:6ec3bc44f055 49 {
phonemacro 4:6ec3bc44f055 50 int ret = RTN_NO_ERROR;
phonemacro 4:6ec3bc44f055 51 m_ir.mode(PullUp);
phonemacro 4:6ec3bc44f055 52 m_ir.fall(Callback<void()>(this, &MAX8614X::irq_handler));
phonemacro 4:6ec3bc44f055 53
phonemacro 4:6ec3bc44f055 54 return ret;
phonemacro 4:6ec3bc44f055 55 }
phonemacro 0:77ee0ceb503a 56 int MAX8614X::readRegister(uint8_t reg, uint8_t *data, int len)
phonemacro 0:77ee0ceb503a 57 {
phonemacro 0:77ee0ceb503a 58 m_cs = 0;
phonemacro 0:77ee0ceb503a 59
phonemacro 0:77ee0ceb503a 60 m_spiBus.write(reg);
phonemacro 0:77ee0ceb503a 61 m_spiBus.write(0x80);
phonemacro 0:77ee0ceb503a 62 int i = 0;
phonemacro 0:77ee0ceb503a 63 for(; i < len; i++) { /*TODO: make len unsigned*/
phonemacro 0:77ee0ceb503a 64 data[i] = m_spiBus.write(0x00);
phonemacro 0:77ee0ceb503a 65 }
phonemacro 0:77ee0ceb503a 66
phonemacro 0:77ee0ceb503a 67 m_cs = 1;
phonemacro 0:77ee0ceb503a 68 return 0; /*TODO: handle error cases*/
phonemacro 0:77ee0ceb503a 69 }
phonemacro 0:77ee0ceb503a 70
phonemacro 0:77ee0ceb503a 71 int MAX8614X::writeRegister(uint8_t reg, const uint8_t data)
phonemacro 0:77ee0ceb503a 72 {
phonemacro 0:77ee0ceb503a 73 m_cs = 0;
phonemacro 0:77ee0ceb503a 74
phonemacro 0:77ee0ceb503a 75 m_spiBus.write(reg);
phonemacro 0:77ee0ceb503a 76 m_spiBus.write(0x00);
phonemacro 0:77ee0ceb503a 77 m_spiBus.write(data);
phonemacro 0:77ee0ceb503a 78
phonemacro 0:77ee0ceb503a 79 m_cs = 1;
phonemacro 0:77ee0ceb503a 80
phonemacro 0:77ee0ceb503a 81 return 0; /*TODO: handle error cases*/
phonemacro 0:77ee0ceb503a 82 }
phonemacro 0:77ee0ceb503a 83
phonemacro 0:77ee0ceb503a 84 int MAX8614X::writeBlock(const RegisterMap reg_block[], unsigned int size)
phonemacro 0:77ee0ceb503a 85 {
phonemacro 0:77ee0ceb503a 86 unsigned int i;
phonemacro 0:77ee0ceb503a 87 int ret = 0;
phonemacro 0:77ee0ceb503a 88
phonemacro 0:77ee0ceb503a 89 for (i = 0; i < size; i++) {
phonemacro 0:77ee0ceb503a 90 ret = writeRegister((Registers) reg_block[i].addr,
phonemacro 0:77ee0ceb503a 91 reg_block[i].val);
phonemacro 0:77ee0ceb503a 92 if (ret < 0) {
phonemacro 0:77ee0ceb503a 93 pr_err("writeRegister failed. ret: %d", ret);
phonemacro 0:77ee0ceb503a 94 return ret;
phonemacro 0:77ee0ceb503a 95 }
phonemacro 0:77ee0ceb503a 96 }
phonemacro 0:77ee0ceb503a 97
phonemacro 0:77ee0ceb503a 98 return ret;
phonemacro 0:77ee0ceb503a 99 }
phonemacro 1:7ae9b934ee55 100 void MAX8614X::irq_handler(void)
phonemacro 1:7ae9b934ee55 101 {
phonemacro 1:7ae9b934ee55 102 int ret;
phonemacro 1:7ae9b934ee55 103 int_status_t status;
phonemacro 1:7ae9b934ee55 104
phonemacro 1:7ae9b934ee55 105 ret = readRegister(MAX8614X_INT_STATUS1_REG, status.val, 2);
phonemacro 1:7ae9b934ee55 106 if (ret < 0) {
phonemacro 1:7ae9b934ee55 107 printf("readRegister failed. ret: %d", ret);
phonemacro 1:7ae9b934ee55 108 }
phonemacro 1:7ae9b934ee55 109 printf("Status reg: %X %X \n\r", status.val[0], status.val[1]);
phonemacro 1:7ae9b934ee55 110
phonemacro 1:7ae9b934ee55 111 if (status.sha_done) {
phonemacro 2:11e0b5b86e1e 112 shaComplete = true;
phonemacro 1:7ae9b934ee55 113 printf("sha interrupt\n\r");
phonemacro 1:7ae9b934ee55 114 }
phonemacro 1:7ae9b934ee55 115 }
phonemacro 2:11e0b5b86e1e 116 bool MAX8614X::isShaComplete(void)
phonemacro 2:11e0b5b86e1e 117 {
phonemacro 2:11e0b5b86e1e 118 return shaComplete;
phonemacro 2:11e0b5b86e1e 119 }
phonemacro 2:11e0b5b86e1e 120 void MAX8614X::clearShaComplete(void)
phonemacro 2:11e0b5b86e1e 121 {
phonemacro 2:11e0b5b86e1e 122 shaComplete = false;
phonemacro 2:11e0b5b86e1e 123 }
phonemacro 0:77ee0ceb503a 124 MAX8614X::~MAX8614X(void)
phonemacro 0:77ee0ceb503a 125 {
phonemacro 0:77ee0ceb503a 126 //empty block
phonemacro 0:77ee0ceb503a 127 }