2018.07.26
Dependencies: TextLCD USBDevice mbed-rtos mbed
2_main.cpp
- Committer:
- sayzyas
- Date:
- 2018-07-26
- Revision:
- 2:d0a5ee4e7bb8
- Parent:
- 1:368ba89c2e6b
File content as of revision 2:d0a5ee4e7bb8:
#include "mbed.h"
#include "USBHID.h"
#include "USBSerial.h"
#include "rtos.h"
#include "common.h"
#include "TextLCD.h"
//#include "TextLCD.h"
//We declare a USBHID device. By default input and output reports are 64 bytes long.
USBHID hid(8, 8);
//USBSerial serial;
Serial pc(USBTX, USBRX); // UART
// I2C i2c(p9, p10); // I2C SDA, SCL
I2CSlave slave(p9, p10); //I2C SDA SCL
//This report will contain data to be sent
HID_REPORT send_report;
HID_REPORT recv_report;
DigitalOut led1(LED1); // 1: on, 0: off
DigitalOut led2(LED2); // 1: on, 0: off
DigitalOut led3(LED3); // 1: on, 0: off
DigitalOut led4(LED4); // 1: on, 0: off
// LED indicator
DigitalOut led_ind0(p13);
DigitalOut led_ind1(p14);
DigitalOut led_ind2(p15);
DigitalOut led_ind3(p25);
DigitalOut led_ind4(p26);
DigitalOut led_ind5(p27);
DigitalOut led_ind6(p28);
DigitalOut led_ind7(p8);
// Switch Matrix 3bit SW ON = 0 input
// bit 2 1 0 Send data
// 0 1 1 1 :
// 1 1 1 0 : 0x01 RF Tfm K
// 2 1 0 1 : 0x02 RF Tfm I
// 3 1 0 0 : 0x04 LB Tfm K
// 4 0 1 1 : 0x08 LB Tfm I
// 5 0 1 0 : 0x10 Winch Down
// 6 0 0 1 : 0x20 Winch Up
// 7 0 0 0 :
DigitalIn sw1(p5); // Bit 0
DigitalIn sw2(p6); // Bit 1
DigitalIn sw3(p7); // Bit 2
// Digital Input 1:OFF, 0:ON
DigitalIn sw_ikmode(p29); // SW: i \ k ,pde ( 1: K, 0: I )
DigitalIn sw_validpart(p30); // SW: CrExp Shape ( 1: Left-Winch. 0: Right-tfmcrwler )
// Analig Joystick input for crawler control
//AnalogIn js_l_ud(p20); // Crawler L-UD
//AnalogIn js_l_lr(p19); // Crawler L-LR
//AnalogIn js_r_ud(p17); // Crawler R-UD
//AnalogIn js_r_lr(p16); // Crawler R-LR
AnalogIn js_l_ud(p19); // Crawler L-UD
AnalogIn js_l_lr(p20); // Crawler L-LR
AnalogIn js_r_ud(p16); // Crawler R-UD
AnalogIn js_r_lr(p17); // Crawler R-LR
uint8_t js_center_value_r_ud = 0x80;
uint8_t js_center_value_r_lr = 0x80;
uint8_t js_center_value_l_ud = 0x80;
uint8_t js_center_value_l_lr = 0x80;
void led_demo(void);
uint8_t calc_motor_speed( uint8_t data, int32_t dir );
void lcd_out( int, int, char* );
void lcd_out2( int column, int row, char* msg, int cnt);
void calibrate_joystick( int mode, uint8_t data_ud, uint8_t data_lr );
TextLCD lcd(p11, p12, p24, p23, p22, p21); // rs, e, d4-d7
int i2c_saddress = 0;
//
void led_winch_valid( int counter )
{
if( counter < 25)
{
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
}
else
{
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
}
}
void led_crawler_valid( int counter )
{
if( counter < 25)
{
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
}
else
{
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
}
}
// LED demo
void led_demo()
{
int i;
for( i = 0; i < 7; i++ ) {
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
led1 = 1; // on
led2 = 0; // off
led3 = 0; // off
led4 = 0; // off
Thread::wait(15);
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
led1 = 0; // off
led2 = 1; // on
led3 = 0; // off
led4 = 0; // off
Thread::wait(15);
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
led1 = 0; // off
led2 = 0; // off
led3 = 1; // on
led4 = 0; // off
Thread::wait(15);
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
led1 = 0; // off
led2 = 0; // off
led3 = 0; // off
led4 = 1; // on
Thread::wait(15);
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
led1 = 0; // off
led2 = 0; // off
led3 = 0; // off
led4 = 0; // off
}
}
// *****************************************************************
// calibration joystick data
// *****************************************************************
void calibrate_joystick( int mode, uint8_t data_ud, uint8_t data_lr ){
uint16_t tmp;
if( mode == 0 )
{
tmp = (uint16_t)js_center_value_r_ud;
tmp += (uint16_t)data_ud;
tmp /= 2;
js_center_value_r_ud = (uint8_t)tmp;
tmp = (uint16_t)js_center_value_r_lr;
tmp += (uint16_t)data_lr;
tmp /= 2;
js_center_value_r_lr = (uint8_t)tmp;
}
else
{
tmp = (uint16_t)js_center_value_l_ud;
tmp += (uint16_t)data_ud;
tmp /= 2;
js_center_value_l_ud = (uint8_t)tmp;
tmp = (uint16_t)js_center_value_l_lr;
tmp += (uint16_t)data_lr;
tmp /= 2;
js_center_value_l_lr = (uint8_t)tmp;
}
}
// *****************************************************************
// calcuilation motor speed
// *****************************************************************
uint8_t calc_motor_speed( uint8_t data, int32_t dir ){
uint8_t speed;
if( dir == 0 ){
// speed = (data - js_center_value) * 100 / js_center_value;
if( speed > 95 ) speed = 100;
}
else{
// speed = (js_center_value - data) * 100 / js_center_value;
if( speed > 95 ) speed = 100;
}
return speed;
}
// *****************************************************************
// switch control task
// ----------------------
//
// Up: center -> 255
// Down: 002 -> center
// Right: center -> 255
// Left : 0 -> center
//
// *****************************************************************
void sw_task( void const *){
char msg[16];
uint16_t js_rud_data;
uint16_t js_rlr_data;
uint8_t js_rud_undata;
uint8_t js_rlr_undata;
uint16_t js_lud_data;
uint16_t js_llr_data;
uint8_t js_lud_undata;
uint8_t js_llr_undata;
float motor_speed_f = 0;
uint8_t motor_speed = 0;
send_report.length = 8;
send_report.data[0] = 0x80; // L JoyStick Left/Right
send_report.data[1] = 0x80; // L JoyStick Up/Down
send_report.data[2] = 0x80; // R JoyStick Left/Right^
send_report.data[3] = 0x80; // R JoyStick Up/Down
send_report.data[4] = 0x00; // Operatiuon Switch
// Data Bytes
// 7 6 5 4 3 2 1 0
// +-+-+-+-+-+----+----+----+----+
// |-|-|-|-|-|LB-I|LB-K|RF-I|RF-K|
// +-+-+-+-+-+----+----+----+----+
send_report.data[5] = 0x00; // JS mode switch
// Command Bit
// 7 6 5 4 3 2 1 0
// +-+-+-+-+-+-+---+----+
// |-|-|-|-|-|-|S/D|I/KO|
// +-+-+-+-+-+-+---+----+
// 1:S 1:KO <--- sw off
// 0:D 0:I <--- sw on
send_report.data[6] = 0x00; // No Function
send_report.data[7] = 0x00; // No Function
send_report.data[8] = 0x00;
DEBUG_PRINT_L1("Calibrating joystick ... ");
// for( int i = 0; i < CALIBRATION_COUNT; i++){
for( int i = 0; i < 10; i++){
js_rud_data = js_r_ud.read_u16();
js_rlr_data = js_r_lr.read_u16();
js_rud_undata = (uint8_t)(js_rud_data >> 8);
js_rlr_undata = (uint8_t)(js_rlr_data >> 8);
calibrate_joystick( 0, js_rud_undata, js_rlr_undata); // Under constraction
js_lud_data = js_l_ud.read_u16();
js_llr_data = js_l_lr.read_u16();
js_lud_undata = (uint8_t)(js_lud_data >> 8);
js_llr_undata = (uint8_t)(js_llr_data >> 8);
calibrate_joystick( 1, js_lud_undata, js_llr_undata); // Under constraction
}
DEBUG_PRINT_L1("done\r\n");
while(1){
js_rud_data = js_r_ud.read_u16();
js_rlr_data = js_r_lr.read_u16();
js_lud_data = js_l_ud.read_u16();
js_llr_data = js_l_lr.read_u16();
js_rud_undata = (uint8_t)(js_rud_data >> 8);
js_rlr_undata = (uint8_t)(js_rlr_data >> 8);
js_lud_undata = (uint8_t)(js_lud_data >> 8);
js_llr_undata = (uint8_t)(js_llr_data >> 8);
DEBUG_PRINT_L1("Handy> ");
DEBUG_PRINT_L1("R:%03d/%3d,%03d/%3d ", js_rud_undata, js_center_value_r_ud, js_rlr_undata, js_center_value_r_ud );
DEBUG_PRINT_L1("L:%03d/%3d,%03d/%3d ", js_lud_undata, js_center_value_l_ud, js_llr_undata, js_center_value_l_ud );
DEBUG_PRINT_L1("SW: %d %d %d ", sw1.read(), sw2.read(), sw3.read() );
DEBUG_PRINT_L1("JS: %d %d\r\n", sw_ikmode.read(), sw_validpart.read() );
// ---------------------------------------------
// Right JoyStick Control
// ---------------------------------------------
// Down
// if( js_rud_undata > (js_center_value_r_ud + DEAD_ZONE_BAND_WIDTH) ){
if( js_rud_undata > (js_center_value_r_ud + 5) ){
// Crawler Forward Run
led4 = 1;
motor_speed = calc_motor_speed( js_rud_undata, 0 );
send_report.data[3] = 255 - js_rud_undata; // speed
DEBUG_PRINT_L2("Handy> R-JS Up: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_rud_undata, send_report.data[3], js_center_value_r_ud);
if ( sw_validpart == 0 ){
//------------123 45 --------------------
sprintf(msg, "F%03d", send_report.data[3]);
lcd_out2(6,1,msg,4);
}
led4 = 0;
}
// Up
// else if( js_rud_undata < (js_center_value_r_ud - DEAD_ZONE_BAND_WIDTH) ){
else if( js_rud_undata < (js_center_value_r_ud - 5) ){
// Crawler Reverse Run
led4 = 1;
motor_speed = calc_motor_speed( js_rud_undata, 1 );
send_report.data[3] = 255 - js_rud_undata; // speed
DEBUG_PRINT_L2("Handy> R-JS Down: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_rud_undata, send_report.data[3], js_center_value_r_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg, "B%03d", send_report.data[3]);
lcd_out2(6,1,msg,4);
}
led4 = 0;
}
else{
send_report.data[3] = 0x80; // speed
// calibrate_joystick(js_ud_un); // Under constraction
led4 = 0;
}
// Right
// if( js_rlr_undata > (js_center_value_r_ud + DEAD_ZONE_BAND_WIDTH) ){
if( js_rlr_undata > (js_center_value_r_ud + 5) ){
// Crawler Forward Run
led4 = 1;
motor_speed = calc_motor_speed( js_rlr_undata, 0 );
send_report.data[2] = js_rlr_undata; // speed
DEBUG_PRINT_L2("Handy> R-JS Right: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_rlr_undata, send_report.data[2], js_center_value_r_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"R%03d", send_report.data[2]);
lcd_out2(6,1,msg,4);
}
led4 = 0;
}
// Left
// else if( js_rlr_undata < (js_center_value_r_ud - DEAD_ZONE_BAND_WIDTH) ){
else if( js_rlr_undata < (js_center_value_r_ud - 5) ){
// Crawler Reverse Run
led4 = 1;
motor_speed = calc_motor_speed( js_rlr_undata, 1 );
send_report.data[2] = js_rlr_undata; // speed
DEBUG_PRINT_L2("Handy> R-JS Left: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_rlr_undata, send_report.data[2], js_center_value_r_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"L%03d", send_report.data[2]);
lcd_out2(6,1,msg,4);
}
led4 = 0;
}
else{
send_report.data[2] = 0x80; // speed
// calibrate_joystick(js_ud_un); // Under constraction
led4 = 0;
}
if( ( send_report.data[2] == 0x80 ) && ( send_report.data[3] == 0x80 ) ){
lcd_out2(6,1," ",4);
}
// ---------------------------------------------
// Left JoyStick Control
// ---------------------------------------------
// Down
// if( js_lud_undata > (js_center_value_l_ud + DEAD_ZONE_BAND_WIDTH) ){
if( js_lud_undata > (js_center_value_l_ud + 5) ){
// Crawler Forward Run
led4 = 1;
motor_speed = calc_motor_speed( js_lud_undata, 0 );
send_report.data[1] = 255 - js_lud_undata; // speed
DEBUG_PRINT_L2("Handy> L-JS Up: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_lud_undata, send_report.data[1], js_center_value_l_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"F%03d", send_report.data[1]);
lcd_out2(1,1,msg,4);
}
led4 = 0;
}
// Up
// else if( js_lud_undata < (js_center_value_l_ud - DEAD_ZONE_BAND_WIDTH) ){
else if( js_lud_undata < (js_center_value_l_ud - 5) ){
// Crawler Reverse Run
led4 = 1;
motor_speed = calc_motor_speed( js_lud_undata, 1 );
send_report.data[1] = 255 - js_lud_undata; // speed
DEBUG_PRINT_L2("Handy> L-JS Down: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_lud_undata, send_report.data[1], js_center_value_l_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"B%03d", send_report.data[1]);
lcd_out2(1,1,msg,4);
}
led4 = 0;
}
else{
send_report.data[1] = 0x80; // speed
// calibrate_joystick(js_l_ud_un); // Under constraction
led4 = 0;
}
// Right
// if( js_llr_undata > (js_center_value_l_ud + DEAD_ZONE_BAND_WIDTH) ){
if( js_llr_undata > (js_center_value_l_ud + 5) ){
// Crawler Forward Run
led4 = 1;
motor_speed = calc_motor_speed( js_llr_undata, 0 );
send_report.data[0] = js_llr_undata; // speed
DEBUG_PRINT_L2("Handy> L-JS Right: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_llr_undata, send_report.data[0], js_center_value_l_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"R%03d", send_report.data[0]);
lcd_out2(1,1,msg,4);
}
led4 = 0;
}
// Left
// else if( js_llr_undata < (js_center_value_l_ud - DEAD_ZONE_BAND_WIDTH) ){
else if( js_llr_undata < (js_center_value_l_ud - 5) ){
// Crawler Reverse Run
led4 = 1;
motor_speed = calc_motor_speed( js_llr_undata, 1 );
send_report.data[0] = js_llr_undata; // speed
DEBUG_PRINT_L2("Handy> L-JS Left: js_data[%03d], motor_speeed[%03d], js_center[%03d]\r\n", js_llr_undata, send_report.data[0], js_center_value_l_ud);
if ( sw_validpart == 0 ){
//-----------123456789 123456--------------------
sprintf(msg,"L%03d", send_report.data[0]);
lcd_out2(1,1,msg,4);
}
led4 = 0;
}
else{
send_report.data[0] = 0x80; // speed
// calibrate_joystick(js_l_ud_un); // Under constraction
led4 = 0;
}
if( ( send_report.data[0] == 0x80 ) && ( send_report.data[1] == 0x80 ) ){
lcd_out2(1,1," ",4);
}
// ---------------------------------------------
// Other Switch Control: Pass
// ---------------------------------------------
if ((sw1 == 0)&&(sw2 == 1)&&(sw3==1)){
led3 = 1;
send_report.data[4] = 0x01; // RF Tfm K (Fwd)
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
// 123456
if ( sw_validpart == 0 )
// 0123456789012345
lcd_out2(10,1,"RF[P] ",6);
}
else if ((sw1 == 1)&&(sw2 == 0)&&(sw3==1)){
send_report.data[4] = 0x02; // RF Tfm I (Rvs)
led3 = 1;
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
// 123456
if ( sw_validpart == 0 )
// 0123456789012345
lcd_out2(10,1,"RF[I] ",6);
}
else if ((sw1 == 0)&&(sw2 == 0)&&(sw3==1)){
send_report.data[4] = 0x04; // LB Tfm K (Fwd)
led3 = 1;
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
// 123456
if ( sw_validpart == 0 )
// 0123456789012345
lcd_out2(10,1,"LB[P] ",6);
}
else if ((sw1 == 1)&&(sw2 == 1)&&(sw3==0)){
led3 = 1;
send_report.data[4] = 0x08; // LB Tfm I (Rvs)
led_ind4 = 1;
led_ind5 = 1;
led_ind6 = 1;
led_ind7 = 1;
// 123456
if ( sw_validpart == 0 )
// 0123456789012345
lcd_out2(10,1,"LB[I] ",6);
}
else if ((sw1 == 1)&&(sw2 == 0)&&(sw3==0)){
led2 = 1;
send_report.data[4] = 0x10; // Winch Down (Fwd)
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
// 123456
if ( sw_validpart == 1 )
// 0123456789012345
lcd_out2(10,1,"Wch Dn",6);
}
else if ((sw1 == 0)&&(sw2 == 1)&&(sw3==0)){
led2 = 1;
send_report.data[4] = 0x20; // Winch Up (Rvs)
led_ind0 = 1;
led_ind1 = 1;
led_ind2 = 1;
led_ind3 = 1;
// 123456
if ( sw_validpart == 1 )
// 0123456789012345
lcd_out2(10,1,"Wch Up",6);
}
else{
send_report.data[4] = 0;
/*
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
*/
led2 = 0;
led3 = 0;
// 0123456789012345
lcd_out2(10,1," ",6);
}
// Command Bit
// 7 6 5 4 3 2 1 0
// +-+-+-+-+-+-+---+----+
// |-|-|-|-|-|-|S/D|I/KO|
// +-+-+-+-+-+-+---+----+
// 1:S 1:KO <--- sw off
// 0:D 0:I <--- sw on
if( sw_validpart == 1 ){ // sw off
send_report.data[5] |= 0x02; // SW off: Winch valid
}
else{ // sw off
send_report.data[5] &= 0xFD; // SW on: Tfm. crawler valid
}
if( sw_ikmode == 1 ){ // sw off
send_report.data[5] |= 0x01; // off: K mode
}
else{ // sw off
send_report.data[5] &= 0xFE; // off: I mode
}
// *************************
// Send Command to HID host: Hot Plug !!
// *************************
hid.send(&send_report); // send command to USB HID host
Thread::wait(5);
}
}
void lcd_out( int column, int row, char* msg ){
// lcd.cls();
lcd.locate(column,row);
/*
for( int i = 0; i < 16; i++ ){
lcd.putc(*msg++);
}
*/
lcd.printf( msg );
Thread::wait(10);
}
void lcd_out2( int column, int row, char* msg, int cnt){
// lcd.cls();
for( int i = 0; i < cnt; i++ ){
lcd.locate(column+i,row);
lcd.putc(*msg++);
}
// lcd.printf( msg );
Thread::wait(10);
}
// **********************************************************************
//
// Main Function of this program
//
// **********************************************************************
int main(void) {
int32_t counter = 0;
char msg[16];
char buf[11];
int i;
pc.baud(115200);
sw_ikmode.mode( PullUp ); // use internal pullup
sw_validpart.mode( PullUp ); // use internal pullup
// i2c_saddress = Target_IIC_ADDR; // defined at header
i2c_saddress = 0x10; // defined at header
i2c_saddress <<= 1;
slave.address(i2c_saddress);
DEBUG_PRINT_L0("Handy> IIC Address: %02x\r\n",i2c_saddress);
lcd_out2(0,0,"B2DebrisSurveyor",16);
lcd_out2(0,1,"Revast Co.,Ltd. ",16);
led_demo();
lcd_out2(0,0,"Rev1.00 20160218",16);
lcd_out2(0,1,"System Booting..",16);
DEBUG_PRINT_L0("\r\n");
DEBUG_PRINT_L0("Handy> +-----------------------------------------------------------\r\n");
DEBUG_PRINT_L0("Handy> | Project: Crawler Explorer for 1F-1 PCV internal inspection\r\n");
DEBUG_PRINT_L0("Handy> |---------\r\n");
DEBUG_PRINT_L0("Handy> | This is: Handy Controller main program over USB-HID \r\n");
// DEBUG_PRINT_L0("Handy> | Target MCU: %s\r\n", Targetmbed);
DEBUG_PRINT_L0("Handy> | Letest update: %s\r\n", LatestUpDate);
DEBUG_PRINT_L0("Handy> | Program Revision: %s\r\n", ProgramRevision);
DEBUG_PRINT_L0("Handy> | Author: %s\r\n", Author);
DEBUG_PRINT_L0("Handy> | Copyright(C) 2015 %s Allright Reserved\r\n", Company);
DEBUG_PRINT_L0("Handy> +-----------------------------------------------------------\r\n");
Thread task1(sw_task, NULL, osPriorityNormal, 256 * 4);
// 1234567890123456
lcd_out2(0,0,"Booted up ! ",16);
if(hid.readNB(&recv_report)) {
//if(hid.read(&recv_report)) {
for(int i = 1; i < recv_report.length; i++) {
DEBUG_PRINT_L0("%d ", recv_report.data[i]);
}
DEBUG_PRINT_L0("\r\n");
}
// 1234567890123456
lcd_out2(0,0,"B2DebrisProbe ",16);
Thread::wait(25);
lcd_out2(0,0,"System OK[-] ",16);
lcd_out2(0,1," ",16);
while (1) {
//try to read a msg
if(hid.readNB(&recv_report)) {
for(int i = 1; i < recv_report.length; i++) {
// DEBUG_PRINT("%d ", recv_report.data[i]);
// serial.printf("%d ", recv_report.data[i]);
}
// DEBUG_PRINT("\r\n");
// serial.printf("\r\n");
}
// 7 6 5 4 3 2 1 0
// +-+-+-+-+-+-+---+----+
// |-|-|-|-|-|-|S/D|I/KO|
// +-+-+-+-+-+-+---+----+
// 1:S 1:KO <--- sw off
// 0:D 0:I <--- sw on
if (( sw_validpart == 0 )&&( sw_ikmode == 0 )){
// 0123456789012345
// lcd_out2(0,0," [O][X] | JS I ",16);
lcd_out2(0,0,"Crawler Inline ",16);
led_crawler_valid(counter);
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
}
else if (( sw_validpart == 0 )&&( sw_ikmode == 1 )){
// 0123456789012345
// lcd_out2(0,0," [O][X] | JS K ",16);
lcd_out2(0,0,"Crawler Para ",16);
led_crawler_valid(counter);
led_ind0 = 0;
led_ind1 = 0;
led_ind2 = 0;
led_ind3 = 0;
}
else if (( sw_validpart == 1 )&&( sw_ikmode == 0 )){
// 0123456789012345
// lcd_out2(0,0," [X][O] | JS I ",16);
lcd_out2(0,0,"Winch ",16);
led_winch_valid(counter);
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
}
else if (( sw_validpart == 1 )&&( sw_ikmode == 1 )){
// 0123456789012345
// lcd_out2(0,0," [X][O] | JS K ",16);
lcd_out2(0,0,"Winch ",16);
led_winch_valid(counter);
led_ind4 = 0;
led_ind5 = 0;
led_ind6 = 0;
led_ind7 = 0;
}
#ifdef __UNUSE__
// ----------------------------------------------------------------
// i2c slave read
// ----------------------------------------------------------------
i = slave.receive();
slave.read(buf, NumberOfI2CCommand ); /* Read size should be 10bit ?? */
switch (i) {
case I2CSlave::NoData:
// DEBUG_PRINT_L0("Handy> the slave has not been addressed\r\n");
// lcd_out2(0,0,"System OK[-] ",16);
break;
case I2CSlave::ReadAddressed:
DEBUG_PRINT_L0("Handy> the master has requested a read from this slave\r\n");
slave.write(msg, strlen(msg) + 1); // Includes null char
break;
case I2CSlave::WriteGeneral:
DEBUG_PRINT_L0("Handy> the master is writing to all slave\r\n");
slave.read(buf, NumberOfI2CCommand);
DEBUG_PRINT_L0("Handy> Read G: %s\r\n", buf);
break;
case I2CSlave::WriteAddressed:
DEBUG_PRINT_L0("Handy> the master is writing to this slave\r\n");
slave.read(buf, NumberOfI2CCommand);
// DEBUG_PRINT_L0("Handy> Read A: %s\r\n", buf);
if( buf[5] == 0x01 ){
// lcd_out2(0,0,"System OK[|] ",16); // command
}
else if( buf[5] == 0x04 ){
// lcd_out2(0,0,"ERROR ",16);
}
else{
// lcd_out2(0,0,"System OK[/] ",16); // unknown command
}
break;
}
for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
#endif
counter++;
if( counter >= 100 ){
// led1 = !led1;
counter = 0;
}
Thread::wait(5);
}
}