16 changed files with 619 additions and 11 deletions
-
17chip/api/zi_adc.hpp
-
3chip/api/zi_api.hpp
-
4chip/zgpio.cpp
-
5chip/zgpio.hpp
-
56chip/zirq_dispatcher.cpp
-
26chip/zirq_dispatcher.hpp
-
40chip/zuart.cpp
-
199components/cmdscheduler/cmd_scheduler_uart_dma.cpp
-
51components/cmdscheduler/cmd_scheduler_uart_dma.hpp
-
35components/hardware/adc/z_simple_adc.cpp
-
64components/hardware/adc/z_simple_adc.hpp
-
80components/sensors/mcp41xxx/mcp41xxx.cpp
-
38components/sensors/mcp41xxx/mcp41xxx.hpp
-
6components/zcancmder/zcanreceiver_master.cpp
-
4components/zcancmder/zcanreceiver_master.hpp
-
2components/zprotocols/zcancmder_v2
@ -0,0 +1,17 @@ |
|||||
|
#pragma once
|
||||
|
#include <stdint.h>
|
||||
|
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
class ZIADC { |
||||
|
public: |
||||
|
virtual ~ZIADC(){}; |
||||
|
|
||||
|
virtual int32_t get_adc_value() { |
||||
|
int32_t adcval = 0; |
||||
|
get_adc_value(adcval); |
||||
|
return adcval; |
||||
|
} |
||||
|
virtual int32_t get_adc_value(int32_t &adcval) = 0; |
||||
|
}; |
||||
|
} // namespace iflytop
|
@ -0,0 +1,3 @@ |
|||||
|
#pragma once
|
||||
|
#include "zi_adc.hpp"
|
||||
|
#include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp"
|
@ -0,0 +1,199 @@ |
|||||
|
|
||||
|
#include "cmd_scheduler_uart_dma.hpp"
|
||||
|
|
||||
|
#include <stdlib.h>
|
||||
|
#include <string.h>
|
||||
|
|
||||
|
#include "project_configs.h"
|
||||
|
#include "sdk\components\zprotocols\errorcode\errorcode.hpp"
|
||||
|
using namespace iflytop; |
||||
|
|
||||
|
#define TAG "CMD"
|
||||
|
|
||||
|
#if 0
|
||||
|
|
||||
|
void CmdSchedulerUartDMA::registerCmd(const char* cmdname, const char* helpinfo, int paraNum, ICmdFunction_t cmdimpl) { |
||||
|
CMD cmdinfo; |
||||
|
cmdinfo.call_cmd = cmdimpl; |
||||
|
cmdinfo.help_info = helpinfo; |
||||
|
cmdinfo.npara = paraNum; |
||||
|
m_cmdMap[cmdname] = cmdinfo; |
||||
|
} |
||||
|
|
||||
|
void CmdSchedulerUartDMA::regbasiccmd() { |
||||
|
this->registerCmd("help", "", 0, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { |
||||
|
ZLOGI(TAG, "cmdlist:"); |
||||
|
for (auto it = m_cmdMap.begin(); it != m_cmdMap.end(); it++) { |
||||
|
ZLOGI(TAG, " %s %s", it->first.c_str(), it->second.help_info.c_str()); |
||||
|
} |
||||
|
return (int32_t)0; |
||||
|
}); |
||||
|
this->registerCmd("sleep_ms", "(ms)", 1, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { |
||||
|
int ms = atoi(paraV[0]); |
||||
|
osDelay(ms); |
||||
|
return 0; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
void CmdSchedulerUartDMA::initialize(UART_HandleTypeDef* huart, uint32_t rxbufsize) { |
||||
|
m_huart = huart; |
||||
|
|
||||
|
rxbuf = new char[rxbufsize + 1]; |
||||
|
ZASSERT(rxbuf != NULL); |
||||
|
m_rxbufsize = rxbufsize; |
||||
|
|
||||
|
// m_uart->initialize(&cfg);
|
||||
|
// ZASSERT(m_uart->startRxIt());
|
||||
|
// m_uart->setrxcb([this](uint8_t* data, size_t len) {
|
||||
|
// if (m_dataisready) {
|
||||
|
// return;
|
||||
|
// }
|
||||
|
// memcpy(rxbuf, data, len);
|
||||
|
// rxbuf[len] = '\0';
|
||||
|
// m_rxsize = len;
|
||||
|
// m_dataisready = true;
|
||||
|
// // on data ,in irq context
|
||||
|
// });
|
||||
|
// regbasiccmd();
|
||||
|
} |
||||
|
// int32_t getAckInt32Val(int index) {
|
||||
|
// int32_t getAckInt32Num() {
|
||||
|
|
||||
|
void CmdSchedulerUartDMA::schedule() { |
||||
|
static ICmdParserACK ack = {0}; |
||||
|
|
||||
|
HAL_UART_StateTypeDef state = HAL_UART_GetState(m_huart); |
||||
|
if (state == HAL_UART_STATE_BUSY_RX || state == HAL_UART_STATE_BUSY_TX_RX) { |
||||
|
HAL_UARTEx_ReceiveToIdle_DMA(m_huart, (uint8_t*)rxbuf, m_rxbufsize); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
for (int i = 0; i < m_rxsize; i++) { |
||||
|
if (rxbuf[i] == '\r' || rxbuf[i] == '\n') { |
||||
|
rxbuf[i] = '\0'; |
||||
|
} |
||||
|
} |
||||
|
for (int i = 0; i < m_rxsize; i++) { |
||||
|
if (rxbuf[i] != '\0') { |
||||
|
// ZLOGI(TAG, "docmd: %s", &rxbuf[i]);
|
||||
|
ZLOGI(TAG, "docmd: %s", &rxbuf[i]); |
||||
|
|
||||
|
int inext = strlen(&rxbuf[i]) + i; |
||||
|
memset(&ack, 0, sizeof(ack)); |
||||
|
#ifdef IFLYTOP_ENABLE_EXCEPTION
|
||||
|
try { |
||||
|
callcmd(&rxbuf[i], &ack); |
||||
|
} catch (...) { |
||||
|
ack.ecode = err::kcatch_exception; |
||||
|
} |
||||
|
#else
|
||||
|
callcmd(&rxbuf[i], &ack); |
||||
|
#endif
|
||||
|
dumpack(&ack); |
||||
|
i = inext; |
||||
|
|
||||
|
if (ack.ecode != 0) { |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
// if (m_rxsize != 1) {
|
||||
|
// ZLOGI(TAG, "doscript:end");
|
||||
|
// }
|
||||
|
m_dataisready = false; |
||||
|
} |
||||
|
void CmdSchedulerUartDMA::dumpack(ICmdParserACK* ack) { |
||||
|
if (ack->ecode == 0) { |
||||
|
if (ack->acktype == ack->kAckType_none) { |
||||
|
ZLOGI(TAG, "\tok"); |
||||
|
} else if (ack->acktype == ack->kAckType_int32) { |
||||
|
ZLOGI(TAG, "\tok-->"); |
||||
|
for (int i = 0; i < ack->getAckInt32Num(); i++) { |
||||
|
// printf(" %d", (int)ack->getAckInt32Val(i));
|
||||
|
ZLOGI(TAG, "\t\t%d", (int)ack->getAckInt32Val(i)); |
||||
|
} |
||||
|
} else if (ack->acktype == ack->kAckType_buf) { |
||||
|
ZLOGI(TAG, "\tok-->"); |
||||
|
for (int i = 0; i < ack->rawlen; i++) { |
||||
|
printf(" %02x", ack->rawdata[i]); |
||||
|
} |
||||
|
printf("\n"); |
||||
|
} else { |
||||
|
ZLOGI(TAG, "\tok"); |
||||
|
} |
||||
|
} else { |
||||
|
ZLOGI(TAG, "\tfailed:%s(%d)", err::error2str(ack->ecode), (int)ack->ecode); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// void CmdSchedulerUartDMA::tx(const char* data, int len) { m_uart->tx((uint8_t*)data, len); }
|
||||
|
int32_t CmdSchedulerUartDMA::callcmd(const char* cmd, ICmdParserACK* ack) { |
||||
|
int32_t argc = 0; |
||||
|
char* argv[10] = {0}; |
||||
|
memset(cmdcache, 0, sizeof(cmdcache)); |
||||
|
argc = 0; |
||||
|
memset(argv, 0, sizeof(argv)); |
||||
|
strcpy(cmdcache, cmd); |
||||
|
remove_note(cmdcache, strlen(cmdcache)); |
||||
|
prase_cmd(cmdcache, strlen(cmdcache), argc, argv); |
||||
|
if (argc == 0) { |
||||
|
return (int32_t)0; |
||||
|
} |
||||
|
|
||||
|
// printf("argc:%d\n", argc);
|
||||
|
// for (size_t i = 0; i < argc; i++) {
|
||||
|
// printf("argv[%d]:%s\n", i, argv[i]);
|
||||
|
// }
|
||||
|
/**
|
||||
|
* @brief ÔÚÕâÀï´¦ÀíÖ¸Áî |
||||
|
*/ |
||||
|
auto cmder = m_cmdMap.find(string(argv[0])); |
||||
|
if (cmder != m_cmdMap.end()) { |
||||
|
if (cmder->second.npara != argc - 1) { |
||||
|
ack->ecode = err::kcmd_param_num_error; |
||||
|
return err::kcmd_param_num_error; |
||||
|
} |
||||
|
cmder->second.call_cmd((int32_t)(argc - 1), (const char**)(&argv[1]), ack); |
||||
|
return ack->ecode; |
||||
|
|
||||
|
} else { |
||||
|
ack->ecode = err::kcmd_not_found; |
||||
|
return err::kcmd_not_found; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void CmdSchedulerUartDMA::remove_note(char* input, int inputlen) { |
||||
|
bool detect_note = false; |
||||
|
for (int i = 0; i < inputlen; i++) { |
||||
|
if (!detect_note && input[i] == '#') { |
||||
|
detect_note = true; |
||||
|
} |
||||
|
if (detect_note) { |
||||
|
input[i] = 0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void CmdSchedulerUartDMA::prase_cmd(char* input, int inputlen, int32_t& argc, char* argv[]) { |
||||
|
for (int i = 0; input[i] == 0 || i < inputlen; i++) { |
||||
|
if (input[i] == ' ' || input[i] == '\r' || input[i] == '\n') { |
||||
|
input[i] = 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int j = 0; |
||||
|
for (int i = 0; input[i] == 0 || i < inputlen; i++) { |
||||
|
if (input[i] != 0 && j == 0) { |
||||
|
argv[argc++] = &input[i]; |
||||
|
j = 1; |
||||
|
continue; |
||||
|
} |
||||
|
|
||||
|
if (input[i] == 0 && j == 1) { |
||||
|
j = 0; |
||||
|
continue; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif
|
@ -0,0 +1,51 @@ |
|||||
|
#pragma once
|
||||
|
#include <map>
|
||||
|
#include <string>
|
||||
|
|
||||
|
#include "sdk/os/zos.hpp"
|
||||
|
#include "sdk\components\zprotocols\errorcode\errorcode.hpp"
|
||||
|
#include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp"
|
||||
|
#if 0
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
|
||||
|
class CmdSchedulerUartDMA : public ICmdParser { |
||||
|
public: |
||||
|
class CMD { |
||||
|
public: |
||||
|
ICmdFunction_t call_cmd; |
||||
|
string help_info; |
||||
|
int npara; |
||||
|
}; |
||||
|
|
||||
|
private: |
||||
|
map<string, CMD> m_cmdMap; |
||||
|
|
||||
|
UART_HandleTypeDef* m_huart; |
||||
|
char* rxbuf; |
||||
|
uint32_t m_rxbufsize; |
||||
|
|
||||
|
int32_t m_rxsize = 0; |
||||
|
|
||||
|
bool m_dataisready = false; |
||||
|
|
||||
|
char cmdcache[1024] = {0}; |
||||
|
bool rxdmaisworking = false; |
||||
|
|
||||
|
public: |
||||
|
void initialize(UART_HandleTypeDef* huart, uint32_t rxbufsize); |
||||
|
virtual void regCMD(const char* cmdname, const char* helpinfo, int paraNum, ICmdFunction_t cmdimpl) override { registerCmd(cmdname, helpinfo, paraNum, cmdimpl); } |
||||
|
void registerCmd(const char* cmdname, const char* helpinfo, int paraNum, ICmdFunction_t cmdimpl); |
||||
|
// void tx(const char* data, int len);
|
||||
|
void schedule(); |
||||
|
|
||||
|
private: |
||||
|
void regbasiccmd(); |
||||
|
int32_t callcmd(const char* cmd, ICmdParserACK* ack); |
||||
|
void prase_cmd(char* input, int inputlen, int32_t& argc, char* argv[]); |
||||
|
void remove_note(char* input, int inputlen); |
||||
|
void dumpack(ICmdParserACK* ack); |
||||
|
}; |
||||
|
} // namespace iflytop
|
||||
|
|
||||
|
#endif
|
@ -0,0 +1,35 @@ |
|||||
|
#include "z_simple_adc.hpp"
|
||||
|
using namespace iflytop; |
||||
|
|
||||
|
void ZADC::initialize(ADC_HandleTypeDef* hadc1, int32_t channel, int32_t m_samplingTime) { |
||||
|
m_hadc1 = hadc1; |
||||
|
m_channel = channel; |
||||
|
} |
||||
|
|
||||
|
#if 0
|
||||
|
int32_t ZADC::get_adc_value() { |
||||
|
ADC_ChannelConfTypeDef sConfig = {0}; |
||||
|
sConfig.Channel = m_channel; /* 通道 */ |
||||
|
sConfig.Rank = 1; |
||||
|
sConfig.SamplingTime = m_samplingTime; /* 采样时间 */ |
||||
|
if (HAL_ADC_ConfigChannel(m_hadc1, &sConfig) != HAL_OK) { |
||||
|
Error_Handler(); |
||||
|
} |
||||
|
HAL_ADC_Start(m_hadc1); |
||||
|
HAL_ADC_PollForConversion(m_hadc1, HAL_MAX_DELAY); |
||||
|
return (uint16_t)HAL_ADC_GetValue(m_hadc1); |
||||
|
} |
||||
|
#endif
|
||||
|
|
||||
|
int32_t ZADC::get_adc_value(int32_t& adcval) { |
||||
|
ADC_ChannelConfTypeDef sConfig = {0}; |
||||
|
sConfig.Channel = m_channel; /* 通道 */ |
||||
|
sConfig.Rank = 1; |
||||
|
sConfig.SamplingTime = m_samplingTime; /* 采样时间 */ |
||||
|
if (HAL_ADC_ConfigChannel(m_hadc1, &sConfig) != HAL_OK) { |
||||
|
return err::kmicro_adcRecvFail; |
||||
|
} |
||||
|
HAL_ADC_Start(m_hadc1); |
||||
|
HAL_ADC_PollForConversion(m_hadc1, HAL_MAX_DELAY); |
||||
|
return (uint16_t)HAL_ADC_GetValue(m_hadc1); |
||||
|
} |
@ -0,0 +1,64 @@ |
|||||
|
#pragma once
|
||||
|
#include <functional>
|
||||
|
|
||||
|
#include "sdk\chip\api\zi_adc.hpp"
|
||||
|
#include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp"
|
||||
|
#include "sdk\os\zos.hpp"
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
class ZADC : public ZIADC { |
||||
|
public: |
||||
|
typedef struct { |
||||
|
ADC_HandleTypeDef* hadc1; |
||||
|
int32_t channel; |
||||
|
int32_t samplingTime; |
||||
|
} adc_config_t; |
||||
|
|
||||
|
private: |
||||
|
ADC_HandleTypeDef* m_hadc1 = nullptr; |
||||
|
int32_t m_channel = 0; |
||||
|
int32_t m_samplingTime = ADC_SAMPLETIME_480CYCLES; |
||||
|
|
||||
|
public: |
||||
|
/**
|
||||
|
* @brief |
||||
|
* |
||||
|
* @param hadc1 adc handle |
||||
|
* @param channel |
||||
|
* ADC_CHANNEL_0 |
||||
|
* ADC_CHANNEL_1 |
||||
|
* ADC_CHANNEL_2 |
||||
|
* ADC_CHANNEL_3 |
||||
|
* ADC_CHANNEL_4 |
||||
|
* ADC_CHANNEL_5 |
||||
|
* ADC_CHANNEL_6 |
||||
|
* ADC_CHANNEL_7 |
||||
|
* ADC_CHANNEL_8 |
||||
|
* ADC_CHANNEL_9 |
||||
|
* ADC_CHANNEL_10 |
||||
|
* ADC_CHANNEL_11 |
||||
|
* ADC_CHANNEL_12 |
||||
|
* ADC_CHANNEL_13 |
||||
|
* ADC_CHANNEL_14 |
||||
|
* ADC_CHANNEL_15 |
||||
|
* ADC_CHANNEL_16 |
||||
|
* ADC_CHANNEL_17 |
||||
|
* ADC_CHANNEL_18 |
||||
|
* @param m_samplingTime |
||||
|
* ADC_SAMPLETIME_3CYCLES |
||||
|
* ADC_SAMPLETIME_15CYCLES |
||||
|
* ADC_SAMPLETIME_28CYCLES |
||||
|
* ADC_SAMPLETIME_56CYCLES |
||||
|
* ADC_SAMPLETIME_84CYCLES |
||||
|
* ADC_SAMPLETIME_112CYCLES |
||||
|
* ADC_SAMPLETIME_144CYCLES |
||||
|
* ADC_SAMPLETIME_480CYCLES |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
void initialize(ADC_HandleTypeDef* hadc1, int32_t channel, int32_t m_samplingTime = ADC_SAMPLETIME_480CYCLES); |
||||
|
void initialize(adc_config_t* config) { initialize(config->hadc1, config->channel, config->samplingTime); } |
||||
|
|
||||
|
virtual int32_t get_adc_value(int32_t& adcval) override; |
||||
|
}; |
||||
|
} // namespace iflytop
|
@ -0,0 +1,80 @@ |
|||||
|
#include "mcp41xxx.hpp"
|
||||
|
using namespace iflytop; |
||||
|
using namespace std; |
||||
|
|
||||
|
#define TAG "MCP41XXX"
|
||||
|
|
||||
|
#define MCP41XXX_WRITE_DATA 0x10
|
||||
|
#define MCP41XXX_OFF 0x20
|
||||
|
|
||||
|
#define MCP41XXX_POTENT_0 0x01
|
||||
|
#define MCP41XXX_POTENT_1 0x02
|
||||
|
#define MCP41XXX_POTENT_0_AND_1 0x03
|
||||
|
|
||||
|
void MCP41XXX::initialize(hardware_config_t* hardwareconfig) { //
|
||||
|
m_hardwareconfig = *hardwareconfig; |
||||
|
ZASSERT(m_hardwareconfig.spihandler); |
||||
|
|
||||
|
if (m_hardwareconfig.ncspin != NULL) { |
||||
|
m_ncspin.initAsOutput(m_hardwareconfig.ncspin, ZGPIO::kMode_nopull, false, true); |
||||
|
} |
||||
|
|
||||
|
if (m_hardwareconfig.nshdn != NULL) { |
||||
|
m_nshdn.initAsOutput(m_hardwareconfig.nshdn, ZGPIO::kMode_nopull, false, true); |
||||
|
} |
||||
|
|
||||
|
if (m_hardwareconfig.nrs != NULL) { |
||||
|
m_nrs.initAsOutput(m_hardwareconfig.nrs, ZGPIO::kMode_nopull, false, true); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void MCP41XXX::setPotentiometerValue_0(uint8_t value) { sendValue(POTENTIOMETER_ONE, value); } |
||||
|
void MCP41XXX::setPotentiometerValue_1(uint8_t value) { sendValue(POTENTIOMETER_TWO, value); } |
||||
|
void MCP41XXX::setPotentiometerValue_both(uint8_t value) { sendValue(POTENTIOMETER_BOTH, value); } |
||||
|
void MCP41XXX::spi_send(uint8_t* data, int32_t len) { |
||||
|
if (m_ncspin.isInit()) m_ncspin.setState(false); |
||||
|
zos_delay(3); |
||||
|
HAL_SPI_Transmit(m_hardwareconfig.spihandler, data, len, HAL_MAX_DELAY); |
||||
|
zos_delay(3); |
||||
|
if (m_ncspin.isInit()) m_ncspin.setState(true); |
||||
|
} |
||||
|
|
||||
|
void MCP41XXX::sendValue(Potentiometer num, uint8_t value) { |
||||
|
uint8_t MCP41xxx_value[2]; |
||||
|
switch ((uint8_t)num) { |
||||
|
case POTENTIOMETER_ONE: |
||||
|
MCP41xxx_value[0] = MCP41XXX_WRITE_DATA | MCP41XXX_POTENT_0; |
||||
|
break; |
||||
|
case POTENTIOMETER_TWO: |
||||
|
MCP41xxx_value[0] = MCP41XXX_WRITE_DATA | MCP41XXX_POTENT_1; |
||||
|
break; |
||||
|
case POTENTIOMETER_BOTH: |
||||
|
MCP41xxx_value[0] = MCP41XXX_WRITE_DATA | MCP41XXX_POTENT_0_AND_1; |
||||
|
break; |
||||
|
default: |
||||
|
MCP41xxx_value[0] = MCP41XXX_WRITE_DATA | MCP41XXX_POTENT_0_AND_1; |
||||
|
break; |
||||
|
} |
||||
|
MCP41xxx_value[1] = value; |
||||
|
spi_send(MCP41xxx_value, 2); |
||||
|
} |
||||
|
|
||||
|
void MCP41XXX::potentiometerShutdonw(Potentiometer num, bool shutdown) { |
||||
|
uint8_t MCP41xxx_off[2]; |
||||
|
switch ((uint8_t)num) { |
||||
|
case POTENTIOMETER_ONE: |
||||
|
MCP41xxx_off[0] = MCP41XXX_OFF | MCP41XXX_POTENT_0; |
||||
|
break; |
||||
|
case POTENTIOMETER_TWO: |
||||
|
MCP41xxx_off[0] = MCP41XXX_OFF | MCP41XXX_POTENT_1; |
||||
|
break; |
||||
|
case POTENTIOMETER_BOTH: |
||||
|
MCP41xxx_off[0] = MCP41XXX_OFF | MCP41XXX_POTENT_0_AND_1; |
||||
|
break; |
||||
|
default: |
||||
|
MCP41xxx_off[0] = MCP41XXX_OFF | MCP41XXX_POTENT_0_AND_1; |
||||
|
break; |
||||
|
} |
||||
|
MCP41xxx_off[1] = 0; |
||||
|
spi_send(MCP41xxx_off, 2); |
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
#pragma once
|
||||
|
#include "sdk\components\zprotocols\errorcode\errorcode.hpp"
|
||||
|
#include "sdk\os\zos.hpp"
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
|
||||
|
class MCP41XXX { |
||||
|
public: |
||||
|
typedef enum { POTENTIOMETER_ONE = 1, POTENTIOMETER_TWO, POTENTIOMETER_BOTH } Potentiometer; |
||||
|
|
||||
|
typedef struct { |
||||
|
SPI_HandleTypeDef* spihandler; |
||||
|
Pin_t ncspin; |
||||
|
Pin_t nshdn; |
||||
|
Pin_t nrs; |
||||
|
} hardware_config_t; |
||||
|
|
||||
|
private: |
||||
|
hardware_config_t m_hardwareconfig; |
||||
|
ZGPIO m_ncspin; |
||||
|
ZGPIO m_nshdn; |
||||
|
ZGPIO m_nrs; |
||||
|
|
||||
|
public: |
||||
|
MCP41XXX() {} |
||||
|
|
||||
|
void initialize(hardware_config_t* hardwareconfig); |
||||
|
void setPotentiometerValue_0(uint8_t value); |
||||
|
void setPotentiometerValue_1(uint8_t value); |
||||
|
void setPotentiometerValue_both(uint8_t value); |
||||
|
|
||||
|
private: |
||||
|
void sendValue(Potentiometer num, uint8_t value); |
||||
|
void potentiometerShutdonw(Potentiometer num, bool shutdown); |
||||
|
void spi_send(uint8_t* data, int32_t len); |
||||
|
}; |
||||
|
|
||||
|
} // namespace iflytop
|
@ -1 +1 @@ |
|||||
Subproject commit 76e03ba23018c81c2f904f3bfaaccff8d7e675c9 |
|
||||
|
Subproject commit 77d567330a2d005341f413743a8c16828e53d270 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue